nalika / rpms / grub2

Forked from rpms/grub2 2 years ago
Clone

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

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