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

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