| Index: src/platform/vboot_reference/utils/kernel_image.c
|
| diff --git a/src/platform/vboot_reference/utils/kernel_image.c b/src/platform/vboot_reference/utils/kernel_image.c
|
| index 893f49a13cef68b9afa7c308ccfdbf751a7a33c4..8201137a4f32fb2c53c48c4bc38eb36bd7ef8b81 100644
|
| --- a/src/platform/vboot_reference/utils/kernel_image.c
|
| +++ b/src/platform/vboot_reference/utils/kernel_image.c
|
| @@ -500,8 +500,10 @@ int VerifyKernel(const uint8_t* firmware_key_blob,
|
| config_ptr = (header_ptr + header_len + kernel_key_signature_len);
|
| if ((error_code = VerifyKernelConfig(kernel_sign_key, config_ptr,
|
| kernel_sign_algorithm,
|
| - &kernel_len)))
|
| + &kernel_len))) {
|
| + RSAPublicKeyFree(kernel_sign_key);
|
| return error_code; /* AKA jump to recovery. */
|
| + }
|
| /* Only continue if kernel data verification succeeds. */
|
| kernel_ptr = (config_ptr +
|
| FIELD_LEN(kernel_version) +
|
| @@ -512,15 +514,18 @@ int VerifyKernel(const uint8_t* firmware_key_blob,
|
| kernel_signature_len);
|
|
|
| if ((error_code = VerifyKernelData(kernel_sign_key, kernel_ptr, kernel_len,
|
| - kernel_sign_algorithm)))
|
| + kernel_sign_algorithm))) {
|
| + RSAPublicKeyFree(kernel_sign_key);
|
| return error_code; /* AKA jump to recovery. */
|
| + }
|
| + RSAPublicKeyFree(kernel_sign_key);
|
| return 0; /* Success! */
|
| }
|
|
|
| int VerifyKernelImage(const RSAPublicKey* firmware_key,
|
| const KernelImage* image,
|
| const int dev_mode) {
|
| - RSAPublicKey* kernel_sign_key;
|
| + RSAPublicKey* kernel_sign_key = NULL;
|
| uint8_t* header_digest = NULL;
|
| uint8_t* config_digest = NULL;
|
| uint8_t* kernel_digest = NULL;
|
| @@ -610,6 +615,7 @@ int VerifyKernelImage(const RSAPublicKey* firmware_key,
|
| }
|
|
|
| verify_failure:
|
| + RSAPublicKeyFree(kernel_sign_key);
|
| Free(kernel_digest);
|
| Free(config_digest);
|
| Free(header_digest);
|
| @@ -622,7 +628,7 @@ const char* VerifyKernelErrorString(int error) {
|
|
|
| int AddKernelKeySignature(KernelImage* image, const char* firmware_key_file) {
|
| uint8_t* header_blob = NULL;
|
| - uint8_t* signature;
|
| + uint8_t* signature = NULL;
|
| int signature_len = siglen_map[image->firmware_sign_algorithm];
|
| if (!image || !firmware_key_file)
|
| return 0;
|
| @@ -645,9 +651,9 @@ int AddKernelKeySignature(KernelImage* image, const char* firmware_key_file) {
|
|
|
| int AddKernelSignature(KernelImage* image,
|
| const char* kernel_signing_key_file) {
|
| - uint8_t* config_blob;
|
| - uint8_t* config_signature;
|
| - uint8_t* kernel_signature;
|
| + uint8_t* config_blob = NULL;
|
| + uint8_t* config_signature = NULL;
|
| + uint8_t* kernel_signature = NULL;
|
| int signature_len = siglen_map[image->kernel_sign_algorithm];
|
|
|
| config_blob = GetKernelConfigBlob(image);
|
| @@ -659,6 +665,7 @@ int AddKernelSignature(KernelImage* image,
|
| Free(config_blob);
|
| return 0;
|
| }
|
| + Free(config_blob);
|
|
|
| image->config_signature = (uint8_t*) Malloc(signature_len);
|
| Memcpy(image->config_signature, config_signature, signature_len);
|
|
|