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

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