]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
loader/i386/multiboot_mbi: Fix handling of errors in broken aout-kludge
authorVladimir Serbinenko <phcoder@gmail.com>
Fri, 17 May 2024 07:53:27 +0000 (10:53 +0300)
committerDaniel Kiper <daniel.kiper@oracle.com>
Thu, 20 Jun 2024 12:46:23 +0000 (14:46 +0200)
Current code in some codepaths neither discards nor reports errors.
Properly surface the error.

While on it split 2 cases of unrelated variables both named err.

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/loader/i386/multiboot_mbi.c

index fae5d6fb8c512ff6909ed9f8be8979381c8ee933..bdaf67ad0120687411ac57928ad3b3b23134e6b4 100644 (file)
@@ -69,7 +69,6 @@ static grub_err_t
 load_kernel (grub_file_t file, const char *filename,
             char *buffer, struct multiboot_header *header)
 {
-  grub_err_t err;
   mbi_load_data_t mld;
 
   mld.file = file;
@@ -81,12 +80,15 @@ load_kernel (grub_file_t file, const char *filename,
 
   if (grub_multiboot_quirks & GRUB_MULTIBOOT_QUIRK_BAD_KLUDGE)
     {
-      err = grub_multiboot_load_elf (&mld);
+      grub_err_t err = grub_multiboot_load_elf (&mld);
+
       if (err == GRUB_ERR_NONE) {
        return GRUB_ERR_NONE;
       }
       if (err == GRUB_ERR_UNKNOWN_OS && (header->flags & MULTIBOOT_AOUT_KLUDGE))
-       grub_errno = GRUB_ERR_NONE;
+       grub_errno = err = GRUB_ERR_NONE;
+      if (err != GRUB_ERR_NONE)
+       return err;
     }
   if (header->flags & MULTIBOOT_AOUT_KLUDGE)
     {
@@ -97,6 +99,7 @@ load_kernel (grub_file_t file, const char *filename,
       grub_size_t code_size;
       void *source;
       grub_relocator_chunk_t ch;
+      grub_err_t err;
 
       if (header->bss_end_addr)
        code_size = (header->bss_end_addr - header->load_addr);