summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Reinauer <reinauer@chromium.org>2011-12-19 15:15:46 -0800
committerStefan Reinauer <reinauer@chromium.org>2011-12-19 15:48:08 -0800
commit5c8bfb5ee454c01e60e953c9a4de7ced6a43ff76 (patch)
treeabead68c4511bb8aa671bf835ae11fec99c30f1f
parent6b0ef22899fd7373084841ec4b35420ab0934a10 (diff)
downloadvboot-5c8bfb5ee454c01e60e953c9a4de7ced6a43ff76.tar.gz
Sanity-check output of VbExDiskGetInfo()
BUG=chromium-os:22724 TEST=none Source change only, nothing for QA to test. Reviewed-on: https://gerrit.chromium.org/gerrit/11546 Tested-by: Bill Richardson <wfrichar@chromium.org> Reviewed-by: Gaurav Shah <gauravsh@chromium.org> (cherry picked from commit 01bf572be8a04b2c4c32b9c6118a084061b42b48) Change-Id: Id384409160e95bcc5ba251b65369a466d4fb8db0 Reviewed-on: https://gerrit.chromium.org/gerrit/13186 Tested-by: Stefan Reinauer <reinauer@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r--firmware/lib/vboot_api_kernel.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/firmware/lib/vboot_api_kernel.c b/firmware/lib/vboot_api_kernel.c
index 344adb64..f2fb47af 100644
--- a/firmware/lib/vboot_api_kernel.c
+++ b/firmware/lib/vboot_api_kernel.c
@@ -69,6 +69,15 @@ uint32_t VbTryLoadKernel(VbCommonParams* cparams, LoadKernelParams* p,
/* Loop over disks */
for (i = 0; i < disk_count; i++) {
VBDEBUG(("VbTryLoadKernel() trying disk %d\n", (int)i));
+ /* Sanity-check what we can. FWIW, VbTryLoadKernel() is always called
+ * with only a single bit set in get_info_flags
+ */
+ if (512 != disk_info[i].bytes_per_lba || /* cgptlib restriction */
+ 32 > disk_info[i].lba_count || /* ditto */
+ get_info_flags != disk_info[i].flags) { /* got only what we asked for */
+ VBDEBUG((" skipping - bogus parameters\n"));
+ continue;
+ }
p->disk_handle = disk_info[i].handle;
p->bytes_per_lba = disk_info[i].bytes_per_lba;
p->ending_lba = disk_info[i].lba_count - 1;