diff options
author | Louis Yung-Chieh Lo <yjlou@chromium.org> | 2010-11-18 09:53:10 +0800 |
---|---|---|
committer | Louis Yung-Chieh Lo <yjlou@chromium.org> | 2010-11-18 09:53:10 +0800 |
commit | 2b23c021f3137427a8b3f00e7702850be6e1c242 (patch) | |
tree | 41236a552e70e816083eec3ed3c14718b01b57da /firmware/lib/cgptlib/include/cgptlib_internal.h | |
parent | fd337168bb4add01ccf9faa64a904052bd36b8ee (diff) | |
download | vboot-2b23c021f3137427a8b3f00e7702850be6e1c242.tar.gz |
Fixing the bug of CGPT when primary entry table is invalid.
http://code.google.com/p/chromium-os/issues/detail?id=9279
This issue disclosed a bug of cgpt. The bug comes from the 'show' command always
reads the primary entry table when '-i partition' is specified. I added an
ANY_VALID constant for GetEntry to automatically select valid entry table.
Also fixed the bugs in cmd_boot.c and cmd_find.c. In cmd_add.c, stop user to
continue if any header/entry table is invalid.
Also fixed the bug that untrusted header size could cause segmentation failure.
Hungte, this is FYI. But welcome to do review.
BUG=chromium-os:9279
TEST=RUNTESTS=1 emerge-x86-generic vboot_reference
Manually tested:
cgpt show /tmp/test -i 1 -b
cgpt show /tmp/test
cgpt add /tmp/test -i 1 -l TEST
cgpt find /tmp/test -l STATE
cgpt boot /tmp/test -i 1
Change-Id: Iaba9c635754096a82b3ec74634af184362d4e264
Change-Id: I6f3e87e3998457676e3388d2a6ed36c0564796d8
Review URL: http://codereview.chromium.org/5115002
Diffstat (limited to 'firmware/lib/cgptlib/include/cgptlib_internal.h')
-rw-r--r-- | firmware/lib/cgptlib/include/cgptlib_internal.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/firmware/lib/cgptlib/include/cgptlib_internal.h b/firmware/lib/cgptlib/include/cgptlib_internal.h index 66ceef13..ccd719c9 100644 --- a/firmware/lib/cgptlib/include/cgptlib_internal.h +++ b/firmware/lib/cgptlib/include/cgptlib_internal.h @@ -61,8 +61,12 @@ /* alias name of index in internal array for primary and secondary header and * entries. */ enum { + /* constants for index */ PRIMARY = 0, SECONDARY = 1, + ANY_VALID = 9999, /* accept any between primary and secondary */ + + /* constants for bit mask */ MASK_NONE = 0, MASK_PRIMARY = 1, MASK_SECONDARY = 2, |