diff options
Diffstat (limited to 'firmware/lib/vboot_common.c')
-rw-r--r-- | firmware/lib/vboot_common.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/firmware/lib/vboot_common.c b/firmware/lib/vboot_common.c index 2cb01f37..226cdb7b 100644 --- a/firmware/lib/vboot_common.c +++ b/firmware/lib/vboot_common.c @@ -437,13 +437,20 @@ int VerifyKernelPreamble(const VbKernelPreambleHeader *preamble, /* * If the preamble header version is at least 2.1, verify we have space - * for the added fields from 2.1. + * for the added fields from >2.1. */ if (preamble->header_version_minor >= 1) { - if(size < EXPECTED_VBKERNELPREAMBLEHEADER2_1_SIZE) { + if((preamble->header_version_minor == 1) && + (size < EXPECTED_VBKERNELPREAMBLEHEADER2_1_SIZE)) { VBDEBUG(("Not enough data for preamble header 2.1.\n")); return VBOOT_PREAMBLE_INVALID; } + + if((preamble->header_version_minor == 2) && + (size < EXPECTED_VBKERNELPREAMBLEHEADER2_2_SIZE)) { + VBDEBUG(("Not enough data for preamble header 2.2.\n")); + return VBOOT_PREAMBLE_INVALID; + } } /* Success */ @@ -469,6 +476,14 @@ int VbGetKernelVmlinuzHeader(const VbKernelPreambleHeader *preamble, return VBOOT_SUCCESS; } +int VbKernelHasFlags(const VbKernelPreambleHeader *preamble) +{ + if (preamble->header_version_minor > 1) + return VBOOT_SUCCESS; + + return VBOOT_KERNEL_PREAMBLE_NO_FLAGS; +} + int VerifyVmlinuzInsideKBlob(uint64_t kblob, uint64_t kblob_size, uint64_t header, uint64_t header_size) { |