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

Unified Diff: src/platform/vboot_reference/utils/kernel_image.c

Issue 858008: VBoot Reference: Fix many memory leaks. (Closed)
Patch Set: Created 10 years, 9 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
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);

Powered by Google App Engine
This is Rietveld 408576698