diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/arm/efi/init.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/arm/efi/init.c index 06df60e2..40c3b467 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/arm/efi/init.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/arm/efi/init.c @@ -71,4 +71,7 @@ grub_machine_fini (int flags) efi_call_1 (b->close_event, tmr_evt); grub_efi_fini (); + + if (!(flags & GRUB_LOADER_FLAG_EFI_KEEP_ALLOCATED_MEMORY)) + grub_efi_memory_fini (); } diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/arm64/efi/init.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/arm64/efi/init.c index 6224999e..5010caef 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/arm64/efi/init.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/arm64/efi/init.c @@ -57,4 +57,7 @@ grub_machine_fini (int flags) return; grub_efi_fini (); + + if (!(flags & GRUB_LOADER_FLAG_EFI_KEEP_ALLOCATED_MEMORY)) + grub_efi_memory_fini (); } diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/efi/efi.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/efi/efi.c index 64c73916..128a87b4 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/efi/efi.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/efi/efi.c @@ -157,7 +157,8 @@ grub_efi_get_loaded_image (grub_efi_handle_t image_handle) void grub_reboot (void) { - grub_machine_fini (GRUB_LOADER_FLAG_NORETURN); + grub_machine_fini (GRUB_LOADER_FLAG_NORETURN | + GRUB_LOADER_FLAG_EFI_KEEP_ALLOCATED_MEMORY); efi_call_4 (grub_efi_system_table->runtime_services->reset_system, GRUB_EFI_RESET_COLD, GRUB_EFI_SUCCESS, 0, NULL); for (;;) ; diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/efi/init.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/efi/init.c index 3dfdf2d2..2c31847b 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/efi/init.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/efi/init.c @@ -80,5 +80,4 @@ grub_efi_fini (void) { grub_efidisk_fini (); grub_console_fini (); - grub_efi_memory_fini (); } diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/i386/efi/init.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/i386/efi/init.c index da499aba..deb2eacd 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/i386/efi/init.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/i386/efi/init.c @@ -39,6 +39,11 @@ grub_machine_init (void) void grub_machine_fini (int flags) { - if (flags & GRUB_LOADER_FLAG_NORETURN) - grub_efi_fini (); + if (!(flags & GRUB_LOADER_FLAG_NORETURN)) + return; + + grub_efi_fini (); + + if (!(flags & GRUB_LOADER_FLAG_EFI_KEEP_ALLOCATED_MEMORY)) + grub_efi_memory_fini (); } diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/ia64/efi/init.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/ia64/efi/init.c index b5ecbd09..f1965571 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/ia64/efi/init.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/ia64/efi/init.c @@ -70,6 +70,11 @@ grub_machine_init (void) void grub_machine_fini (int flags) { - if (flags & GRUB_LOADER_FLAG_NORETURN) - grub_efi_fini (); + if (!(flags & GRUB_LOADER_FLAG_NORETURN)) + return; + + grub_efi_fini (); + + if (!(flags & GRUB_LOADER_FLAG_EFI_KEEP_ALLOCATED_MEMORY)) + grub_efi_memory_fini (); } diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/riscv/efi/init.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/riscv/efi/init.c index 7eb1969d..38795fe6 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/riscv/efi/init.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/kern/riscv/efi/init.c @@ -73,4 +73,7 @@ grub_machine_fini (int flags) return; grub_efi_fini (); + + if (!(flags & GRUB_LOADER_FLAG_EFI_KEEP_ALLOCATED_MEMORY)) + grub_efi_memory_fini (); } diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/lib/efi/halt.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/lib/efi/halt.c index 6d490d90..bb8b577f 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/lib/efi/halt.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/lib/efi/halt.c @@ -28,7 +28,8 @@ void grub_halt (void) { - grub_machine_fini (GRUB_LOADER_FLAG_NORETURN); + grub_machine_fini (GRUB_LOADER_FLAG_NORETURN | + GRUB_LOADER_FLAG_EFI_KEEP_ALLOCATED_MEMORY); #if !defined(__ia64__) && !defined(__arm__) && !defined(__aarch64__) && !defined(__mips__) &&\ !defined(__loongarch__) && !defined(__riscv) grub_acpi_halt (); diff --git a/GRUB2/MOD_SRC/grub-2.04/include/grub/loader.h b/GRUB2/MOD_SRC/grub-2.04/include/grub/loader.h index 7f82a499..b2086428 100644 --- a/GRUB2/MOD_SRC/grub-2.04/include/grub/loader.h +++ b/GRUB2/MOD_SRC/grub-2.04/include/grub/loader.h @@ -33,6 +33,7 @@ enum { GRUB_LOADER_FLAG_NORETURN = 1, GRUB_LOADER_FLAG_PXE_NOT_UNLOAD = 2, + GRUB_LOADER_FLAG_EFI_KEEP_ALLOCATED_MEMORY = 4, }; void EXPORT_FUNC (grub_loader_set) (grub_err_t (*boot) (void),