From 6c35ce72bad698051f82b087cd026f8e5331f915 Mon Sep 17 00:00:00 2001 From: Andrei Borzenkov Date: Tue, 12 Jan 2016 21:10:12 +0300 Subject: [PATCH] verify: fix memory leak Found by: Coverity scan. CID: 96643 --- grub-core/commands/verify.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/grub-core/commands/verify.c b/grub-core/commands/verify.c index 9620a3b4c..67cb1c785 100644 --- a/grub-core/commands/verify.c +++ b/grub-core/commands/verify.c @@ -324,19 +324,19 @@ grub_load_public_key (grub_file_t f) if (grub_file_read (f, &l, sizeof (l)) != sizeof (l)) { grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); - goto fail; + break; } lb = (grub_be_to_cpu16 (l) + GRUB_CHAR_BIT - 1) / GRUB_CHAR_BIT; if (lb > READBUF_SIZE - sizeof (grub_uint16_t)) { grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); - goto fail; + break; } if (grub_file_read (f, buffer + sizeof (grub_uint16_t), lb) != (grub_ssize_t) lb) { grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); - goto fail; + break; } grub_memcpy (buffer, &l, sizeof (l)); @@ -346,10 +346,16 @@ grub_load_public_key (grub_file_t f) buffer, lb + sizeof (grub_uint16_t), 0)) { grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature")); - goto fail; + break; } } + if (i < pkalgos[pk].nmpipub) + { + grub_free (sk); + goto fail; + } + GRUB_MD_SHA1->final (fingerprint_context); grub_memcpy (sk->fingerprint, GRUB_MD_SHA1->read (fingerprint_context), 20);