Blame SOURCES/0546-modules-Don-t-allocate-space-for-non-allocable-secti.patch

0ccc47
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
0ccc47
From: Peter Jones <pjones@redhat.com>
0ccc47
Date: Mon, 21 Mar 2022 16:56:10 -0400
0ccc47
Subject: [PATCH] modules: Don't allocate space for non-allocable sections.
0ccc47
0ccc47
Currently when loading grub modules, we allocate space for all sections,
0ccc47
including those without SHF_ALLOC set.  We then copy the sections that
0ccc47
/do/ have SHF_ALLOC set into the allocated memory, leaving some of our
0ccc47
allocation untouched forever.  Additionally, on platforms with GOT
0ccc47
fixups and trampolines, we currently compute alignment round-ups for the
0ccc47
sections and sections with sh_size = 0.
0ccc47
0ccc47
This patch removes the extra space from the allocation computation, and
0ccc47
makes the allocation computation loop skip empty sections as the loading
0ccc47
loop does.
0ccc47
0ccc47
Signed-off-by: Peter Jones <pjones@redhat.com>
0ccc47
(cherry picked from commit 03215e342f552396ab08125ea769b1e166417ec1)
0ccc47
(cherry picked from commit 91518751b9bcba078e3f4385f4b2f6c39cab49cd)
0ccc47
---
0ccc47
 grub-core/kern/dl.c | 3 +++
0ccc47
 1 file changed, 3 insertions(+)
0ccc47
0ccc47
diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c
0ccc47
index 520126beab..ba1b33c20b 100644
0ccc47
--- a/grub-core/kern/dl.c
0ccc47
+++ b/grub-core/kern/dl.c
0ccc47
@@ -290,6 +290,9 @@ grub_dl_load_segments (grub_dl_t mod, const Elf_Ehdr *e)
0ccc47
        i < e->e_shnum;
0ccc47
        i++, s = (const Elf_Shdr *)((const char *) s + e->e_shentsize))
0ccc47
     {
0ccc47
+      if (s->sh_size == 0 || !(s->sh_flags & SHF_ALLOC))
0ccc47
+	continue;
0ccc47
+
0ccc47
       tsize = ALIGN_UP (tsize, s->sh_addralign) + s->sh_size;
0ccc47
       if (talign < s->sh_addralign)
0ccc47
 	talign = s->sh_addralign;