Blame SOURCES/v0.9.2-backport-MR-1200-Make-sure-section-symbols-ex.patch

93c8d4
From c1a07a5329c0b7db0ec54eea093e5d2d77735c06 Mon Sep 17 00:00:00 2001
93c8d4
From: Joe Lawrence <joe.lawrence@redhat.com>
93c8d4
Date: Fri, 9 Dec 2022 15:37:49 -0500
93c8d4
Subject: [PATCH] v0.9.2 backport: MR!1200 ("Make sure section symbols exist")
93c8d4
Content-type: text/plain
93c8d4
93c8d4
commit 5622e3cc3d393fd77866b9838d16cd064de6fba5
93c8d4
Author: Artem Savkov <asavkov@redhat.com>
93c8d4
Date:   Fri Jun 18 10:59:26 2021 +0200
93c8d4
93c8d4
    Make sure section symbols exist
93c8d4
93c8d4
    Binutils recently became much more aggressive about removing unused
93c8d4
    section symbols. Since we can not rely on those being available anymore
93c8d4
    add additional checks before using them.
93c8d4
93c8d4
    Fixes: #1193
93c8d4
93c8d4
    Signed-off-by: Artem Savkov <asavkov@redhat.com>
93c8d4
93c8d4
Fixes: KLP-216 ("Backport kpatch-build section symbol check")
93c8d4
Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com>
93c8d4
---
93c8d4
 kpatch-build/create-diff-object.c | 15 ++++++++++-----
93c8d4
 1 file changed, 10 insertions(+), 5 deletions(-)
93c8d4
93c8d4
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
93c8d4
index c9afe33bbdae..94879b5fce6a 100644
93c8d4
--- a/kpatch-build/create-diff-object.c
93c8d4
+++ b/kpatch-build/create-diff-object.c
93c8d4
@@ -1241,7 +1241,8 @@ static void kpatch_correlate_static_local_variables(struct kpatch_elf *base,
93c8d4
 		if (bundled && sym->sec->twin) {
93c8d4
 			UNCORRELATE_ELEMENT(sym->sec);
93c8d4
 
93c8d4
-			UNCORRELATE_ELEMENT(sym->sec->secsym);
93c8d4
+			if (sym->sec->secsym)
93c8d4
+				UNCORRELATE_ELEMENT(sym->sec->secsym);
93c8d4
 
93c8d4
 			if (sym->sec->rela)
93c8d4
 				UNCORRELATE_ELEMENT(sym->sec->rela);
93c8d4
@@ -1744,7 +1745,7 @@ static int kpatch_include_callback_elements(struct kpatch_elf *kelf)
93c8d4
 			sym = rela->sym;
93c8d4
 			log_normal("found callback: %s\n",sym->name);
93c8d4
 			kpatch_include_symbol(sym);
93c8d4
-		} else {
93c8d4
+		} else if (sec->secsym) {
93c8d4
 			sec->secsym->include = 1;
93c8d4
 		}
93c8d4
 	}
93c8d4
@@ -1772,7 +1773,8 @@ static void kpatch_include_force_elements(struct kpatch_elf *kelf)
93c8d4
 			sec->include = 1;
93c8d4
 			if (!is_rela_section(sec)) {
93c8d4
 				/* .kpatch.force */
93c8d4
-				sec->secsym->include = 1;
93c8d4
+				if (sec->secsym)
93c8d4
+					sec->secsym->include = 1;
93c8d4
 				continue;
93c8d4
 			}
93c8d4
 			/* .rela.kpatch.force */
93c8d4
@@ -2381,7 +2383,8 @@ static void kpatch_regenerate_special_section(struct kpatch_elf *kelf,
93c8d4
 	sec->include = 1;
93c8d4
 	sec->base->include = 1;
93c8d4
 	/* include secsym so .kpatch.arch relas can point to section symbols */
93c8d4
-	sec->base->secsym->include = 1;
93c8d4
+	if (sec->base->secsym)
93c8d4
+		sec->base->secsym->include = 1;
93c8d4
 
93c8d4
 	/*
93c8d4
 	 * Update text section data buf and size.
93c8d4
@@ -2564,7 +2567,9 @@ static void kpatch_mark_ignored_sections(struct kpatch_elf *kelf)
93c8d4
 		 * from the section data comparison, but this is a simpler way.
93c8d4
 		 */
93c8d4
 		strsec->include = 1;
93c8d4
-		strsec->secsym->include = 1;
93c8d4
+		if (strsec->secsym)
93c8d4
+			strsec->secsym->include = 1;
93c8d4
+
93c8d4
 		name = strsec->data->d_buf + rela->addend;
93c8d4
 		ignoresec = find_section_by_name(&kelf->sections, name);
93c8d4
 		if (!ignoresec)
93c8d4
-- 
93c8d4
2.38.1
93c8d4