summaryrefslogtreecommitdiff
path: root/firmware/lib/vboot_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/lib/vboot_common.c')
-rw-r--r--firmware/lib/vboot_common.c19
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)
{