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

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