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

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