Hello community, here is the log from the commit of package grub2 for openSUSE:Factory checked in at 2016-05-23 16:37:12 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/grub2 (Old) and /work/SRC/openSUSE:Factory/.grub2.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "grub2" Changes: -------- --- /work/SRC/openSUSE:Factory/grub2/grub2.changes 2016-05-05 08:12:18.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.grub2.new/grub2.changes 2016-05-23 16:37:13.000000000 +0200 @@ -1,0 +2,6 @@ +Thu May 19 14:56:53 UTC 2016 - [email protected] + +- Add patch to free memory on exit in efi environments (bsc#980739) + * grub2-efi-Free-malloc-regions-on-exit.patch + +------------------------------------------------------------------- New: ---- grub2-efi-Free-malloc-regions-on-exit.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ grub2.spec ++++++ --- /var/tmp/diff_new_pack.WbDT7i/_old 2016-05-23 16:37:15.000000000 +0200 +++ /var/tmp/diff_new_pack.WbDT7i/_new 2016-05-23 16:37:15.000000000 +0200 @@ -203,6 +203,8 @@ # Hidden menu entry and hotkey "t" for text console Patch140: grub2-Add-hidden-menu-entries.patch Patch141: grub2-SUSE-Add-the-t-hotkey.patch +# EFI free memory on exit fix (bsc#980739) +Patch150: grub2-efi-Free-malloc-regions-on-exit.patch # PPC64 LE support Patch205: grub2-ppc64le-disable-video.patch Patch207: grub2-ppc64le-memory-map.patch @@ -426,6 +428,7 @@ %patch131 -p1 %patch140 -p1 %patch141 -p1 +%patch150 -p1 %patch205 -p1 %patch207 -p1 %patch233 -p1 ++++++ grub2-efi-Free-malloc-regions-on-exit.patch ++++++ >From 0c5fbc745846a53cc04ac1052cfbd35c699394c5 Mon Sep 17 00:00:00 2001 From: Alexander Graf <[email protected]> Date: Thu, 19 May 2016 15:01:06 +0200 Subject: [PATCH] efi: Free malloc regions on exit When we exit grub, we don't free all the memory that we allocated earlier for our heap region. This can cause problems with setups where you try to descend the boot order using "exit" entries, such as PXE -> HD boot scenarios. Signed-off-by: Alexander Graf <[email protected]> --- grub-core/kern/efi/init.c | 1 + grub-core/kern/efi/mm.c | 24 ++++++++++++++++++++++++ include/grub/efi/efi.h | 1 + 3 files changed, 26 insertions(+) Index: grub-2.02~beta3/grub-core/kern/efi/init.c =================================================================== --- grub-2.02~beta3.orig/grub-core/kern/efi/init.c +++ grub-2.02~beta3/grub-core/kern/efi/init.c @@ -167,4 +167,5 @@ grub_efi_fini (void) { grub_efidisk_fini (); grub_console_fini (); + grub_efi_memory_fini (); } Index: grub-2.02~beta3/grub-core/kern/efi/mm.c =================================================================== --- grub-2.02~beta3.orig/grub-core/kern/efi/mm.c +++ grub-2.02~beta3/grub-core/kern/efi/mm.c @@ -49,6 +49,12 @@ static grub_efi_uintn_t finish_desc_size static grub_efi_uint32_t finish_desc_version; int grub_efi_is_finished = 0; +struct efi_allocation { + grub_uint64_t start_addr; + grub_uint64_t pages; +} efi_allocated_memory[16]; +unsigned int efi_allocated_memory_idx = 0; + /* Allocate pages below a specified address */ void * grub_efi_allocate_pages_max (grub_efi_physical_address_t max, @@ -440,6 +446,13 @@ add_memory_regions (grub_efi_memory_desc (void *) ((grub_addr_t) start), (unsigned) pages); + /* Track up to 16 regions that we allocate from */ + if (efi_allocated_memory_idx < ARRAY_SIZE(efi_allocated_memory)) { + efi_allocated_memory[efi_allocated_memory_idx].start_addr = start; + efi_allocated_memory[efi_allocated_memory_idx].pages = pages; + efi_allocated_memory_idx++; + } + grub_mm_init_region (addr, PAGES_TO_BYTES (pages)); required_pages -= pages; @@ -451,6 +464,17 @@ add_memory_regions (grub_efi_memory_desc grub_fatal ("too little memory"); } +void +grub_efi_memory_fini (void) +{ + unsigned int i; + + for (i = 0; i < efi_allocated_memory_idx; i++) { + grub_efi_free_pages (efi_allocated_memory[i].start_addr, + efi_allocated_memory[i].pages); + } +} + #if 0 /* Print the memory map. */ static void Index: grub-2.02~beta3/include/grub/efi/efi.h =================================================================== --- grub-2.02~beta3.orig/include/grub/efi/efi.h +++ grub-2.02~beta3/include/grub/efi/efi.h @@ -51,6 +51,7 @@ EXPORT_FUNC(grub_efi_get_memory_map) (gr grub_efi_uintn_t *map_key, grub_efi_uintn_t *descriptor_size, grub_efi_uint32_t *descriptor_version); +void grub_efi_memory_fini (void); grub_efi_loaded_image_t *EXPORT_FUNC(grub_efi_get_loaded_image) (grub_efi_handle_t image_handle); void EXPORT_FUNC(grub_efi_print_device_path) (grub_efi_device_path_t *dp); char *EXPORT_FUNC(grub_efi_get_filename) (grub_efi_device_path_t *dp);
