Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(619)

Unified Diff: vboot_firmware/lib/firmware_image_fw.c

Issue 2837002: Fixed VerifyFirmwarePreamble to check for a valid signing algorithm (Closed) Base URL: http://src.chromium.org/git/vboot_reference.git
Patch Set: Changed VerifyFirmwareData to verify that signing algorithm is valid Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: vboot_firmware/lib/firmware_image_fw.c
diff --git a/vboot_firmware/lib/firmware_image_fw.c b/vboot_firmware/lib/firmware_image_fw.c
index 75f4b09f30ea2e49686be420e97e0162dd34337d..0bbe157442221fef2b87b72b9c2a69e19fca0c40 100644
--- a/vboot_firmware/lib/firmware_image_fw.c
+++ b/vboot_firmware/lib/firmware_image_fw.c
@@ -111,6 +111,10 @@ int VerifyFirmwarePreamble(RSAPublicKey* firmware_sign_key,
preamble_blob + (FIELD_LEN(firmware_version) +
FIELD_LEN(firmware_len)),
FIELD_LEN(kernel_subkey_sign_algorithm));
+
+ if (kernel_subkey_sign_algorithm >= kNumAlgorithms)
+ return VERIFY_FIRMWARE_INVALID_ALGORITHM;
+
preamble_len = GetFirmwarePreambleLen(kernel_subkey_sign_algorithm);
if (!RSAVerifyBinary_f(NULL, firmware_sign_key, /* Key to use */
preamble_blob, /* Data to verify */
@@ -140,8 +144,11 @@ int VerifyFirmwareData(RSAPublicKey* firmware_sign_key,
preamble_start + (FIELD_LEN(firmware_version) +
FIELD_LEN(firmware_len)),
FIELD_LEN(kernel_subkey_sign_algorithm));
- preamble_len = GetFirmwarePreambleLen(kernel_subkey_sign_algorithm);
+ if (kernel_subkey_sign_algorithm >= kNumAlgorithms)
+ return VERIFY_FIRMWARE_INVALID_ALGORITHM;
+
+ preamble_len = GetFirmwarePreambleLen(kernel_subkey_sign_algorithm);
/* Since the firmware signature is over the preamble and the firmware data,
* which does not form a contiguous region of memory, we calculate the
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698