f0ad2aa
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
f0ad2aa
From: Chris Coulson <chris.coulson@canonical.com>
f0ad2aa
Date: Mon, 2 May 2022 14:39:31 +0200
f0ad2aa
Subject: [PATCH] loader/i386/efi/linux: Avoid a use-after-free in the linuxefi
f0ad2aa
 loader
f0ad2aa
f0ad2aa
In some error paths in grub_cmd_linux, the pointer to lh may be
f0ad2aa
dereferenced after the buffer it points to has been freed. There aren't
f0ad2aa
any security implications from this because nothing else uses the
f0ad2aa
allocator after the buffer is freed and before the pointer is
f0ad2aa
dereferenced, but fix it anyway.
f0ad2aa
f0ad2aa
Signed-off-by: Chris Coulson <chris.coulson@canonical.com>
f0ad2aa
(cherry picked from commit 8224f5a71af94bec8697de17e7e579792db9f9e2)
f0ad2aa
---
f0ad2aa
 grub-core/loader/i386/efi/linux.c | 5 ++---
f0ad2aa
 1 file changed, 2 insertions(+), 3 deletions(-)
f0ad2aa
f0ad2aa
diff --git a/grub-core/loader/i386/efi/linux.c b/grub-core/loader/i386/efi/linux.c
f0ad2aa
index 941df6400b..27bc2aa161 100644
f0ad2aa
--- a/grub-core/loader/i386/efi/linux.c
f0ad2aa
+++ b/grub-core/loader/i386/efi/linux.c
f0ad2aa
@@ -465,9 +465,6 @@ fail:
f0ad2aa
   if (file)
f0ad2aa
     grub_file_close (file);
f0ad2aa
 
f0ad2aa
-  if (kernel)
f0ad2aa
-    grub_free (kernel);
f0ad2aa
-
f0ad2aa
   if (grub_errno != GRUB_ERR_NONE)
f0ad2aa
     {
f0ad2aa
       grub_dl_unref (my_mod);
f0ad2aa
@@ -483,6 +480,8 @@ fail:
f0ad2aa
       kernel_free (params, sizeof(*params));
f0ad2aa
     }
f0ad2aa
 
f0ad2aa
+  grub_free (kernel);
f0ad2aa
+
f0ad2aa
   return grub_errno;
f0ad2aa
 }
f0ad2aa