|
|
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 |
|