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 - agraf@suse.com
+
+- 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
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
---
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);