!82 upgrade kpatch to version 0.9.7

From: @hubin95 
Reviewed-by: @xiezhipeng1 
Signed-off-by: @xiezhipeng1
This commit is contained in:
openeuler-ci-bot 2023-01-30 08:36:08 +00:00 committed by Gitee
commit 3e75fde73e
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
50 changed files with 695 additions and 1117 deletions

View File

@ -1,7 +1,7 @@
From 821e6cb24778bd063d1e8ad097d4bd4c81973091 Mon Sep 17 00:00:00 2001
From af8c2cebd046dd3833cba8daac26e4d8109f7ff3 Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Thu, 20 Dec 2018 04:55:38 +0000
Subject: [PATCH 01/24] kpatch: add aarch64 support
Subject: [PATCH 01/37] kpatch: add aarch64 support
1.use R_AARCH64_ABS64 for aarch64
2.add find_special_section_data_arm64 for arm64:
@ -10,68 +10,109 @@ in vmlinux, we don't need to check these two struct for arm64.
Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
---
kpatch-build/Makefile | 4 +++
kpatch-build/create-diff-object.c | 14 ++++++----
kpatch-build/kpatch-build | 46 +++++++++++++++++++++++++++++++
kpatch-build/kpatch-elf.c | 2 +-
4 files changed, 60 insertions(+), 6 deletions(-)
kpatch-build/Makefile | 2 +-
kpatch-build/create-diff-object.c | 32 ++++++++++++++++++-------------
kpatch-build/kpatch-build | 5 +++++
kpatch-build/kpatch-elf.c | 7 +++++++
kpatch-build/kpatch-elf.h | 1 +
5 files changed, 33 insertions(+), 14 deletions(-)
diff --git a/kpatch-build/Makefile b/kpatch-build/Makefile
index 50899b6..423c32a 100644
index bebf3cd..5037677 100644
--- a/kpatch-build/Makefile
+++ b/kpatch-build/Makefile
@@ -14,6 +14,10 @@ ifeq ($(ARCH),x86_64)
SOURCES += insn/insn.c insn/inat.c
INSN = insn/insn.o insn/inat.o
insn/%.o: CFLAGS := $(filter-out -Wconversion, $(CFLAGS))
+else ifeq ($(ARCH),aarch64)
+SOURCES += insn/insn.c insn/inat.c
+INSN = insn/insn.o insn/inat.o
+insn/%.o: CFLAGS := $(filter-out -Wconversion, $(CFLAGS))
else ifeq ($(ARCH),ppc64le)
SOURCES += gcc-plugins/ppc64le-plugin.c
PLUGIN = gcc-plugins/ppc64le-plugin.so
@@ -22,7 +22,7 @@ PLUGIN_CFLAGS := $(filter-out -Wconversion, $(CFLAGS))
PLUGIN_CFLAGS += -shared -I$(GCC_PLUGINS_DIR)/include \
-Igcc-plugins -fPIC -fno-rtti -O2 -Wall
endif
-ifeq ($(filter $(ARCH),s390x x86_64 ppc64le),)
+ifeq ($(filter $(ARCH),s390x x86_64 ppc64le aarch64),)
$(error Unsupported architecture ${ARCH}, check https://github.com/dynup/kpatch/#supported-architectures)
endif
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 6a4848a..ca55180 100644
index 3604411..0b0b06b 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -62,6 +62,8 @@
#ifdef __powerpc64__
#define ABSOLUTE_RELA_TYPE R_PPC64_ADDR64
+#elif __aarch64__
+#define ABSOLUTE_RELA_TYPE R_AARCH64_ABS64
#else
#define ABSOLUTE_RELA_TYPE R_X86_64_64
#endif
@@ -1536,7 +1538,7 @@ static void kpatch_replace_sections_syms(struct kpatch_elf *kelf)
continue;
@@ -175,6 +175,8 @@ static bool is_gcc6_localentry_bundled_sym(struct kpatch_elf *kelf,
return false;
case S390:
return false;
+ case ARM64:
+ return false;
default:
ERROR("unsupported arch");
}
-#ifdef __powerpc64__
+#if defined(__powerpc64__) || defined(__aarch64__)
add_off = 0;
#else
if (rela->type == R_X86_64_PC32 ||
@@ -2028,7 +2030,7 @@ static int printk_index_group_size(struct kpatch_elf *kelf, int offset)
return size;
}
-#ifdef __x86_64__
+#if defined(__x86_64__) || defined(__aarch64__)
static int parainstructions_group_size(struct kpatch_elf *kelf, int offset)
@@ -2186,57 +2188,57 @@ static int fixup_group_size(struct kpatch_elf *kelf, int offset)
static struct special_section special_sections[] = {
{
.name = "__bug_table",
- .arch = X86_64 | PPC64 | S390,
+ .arch = X86_64 | PPC64 | S390 | ARM64,
.group_size = bug_table_group_size,
},
{
.name = ".fixup",
- .arch = X86_64 | PPC64 | S390,
+ .arch = X86_64 | PPC64 | S390 | ARM64,
.group_size = fixup_group_size,
},
{
.name = "__ex_table", /* must come after .fixup */
- .arch = X86_64 | PPC64 | S390,
+ .arch = X86_64 | PPC64 | S390 | ARM64,
.group_size = ex_table_group_size,
},
{
.name = "__jump_table",
- .arch = X86_64 | PPC64 | S390,
+ .arch = X86_64 | PPC64 | S390 | ARM64,
.group_size = jump_table_group_size,
},
{
static int size = 0;
@@ -2177,7 +2179,7 @@ static struct special_section special_sections[] = {
.name = ".printk_index",
- .arch = X86_64 | PPC64 | S390,
+ .arch = X86_64 | PPC64 | S390 | ARM64,
.group_size = printk_index_group_size,
},
-#ifdef __x86_64__
+#if defined(__x86_64__) || defined(__aarch64__)
{
.name = ".smp_locks",
- .arch = X86_64,
+ .arch = X86_64 | ARM64,
.group_size = smp_locks_group_size,
@@ -2990,7 +2992,9 @@ static int function_ptr_rela(const struct rela *rela)
},
{
.name = ".parainstructions",
- .arch = X86_64,
+ .arch = X86_64 | ARM64,
.group_size = parainstructions_group_size,
},
{
.name = ".altinstructions",
- .arch = X86_64 | S390,
+ .arch = X86_64 | S390 | ARM64,
.group_size = altinstructions_group_size,
},
{
.name = ".static_call_sites",
- .arch = X86_64,
+ .arch = X86_64 | ARM64,
.group_size = static_call_sites_group_size,
},
{
.name = ".retpoline_sites",
- .arch = X86_64,
+ .arch = X86_64 | ARM64,
.group_size = retpoline_sites_group_size,
},
{
.name = ".return_sites",
- .arch = X86_64,
+ .arch = X86_64 | ARM64,
.group_size = return_sites_group_size,
},
{
@@ -3097,7 +3099,9 @@ static int function_ptr_rela(const struct rela *rela)
rela_toc->addend == (int)rela_toc->sym->sym.st_value &&
(rela->type == R_X86_64_32S ||
rela->type == R_PPC64_TOC16_HA ||
@ -81,92 +122,99 @@ index 6a4848a..ca55180 100644
+ rela->type == R_AARCH64_ADD_ABS_LO12_NC));
}
static bool need_dynrela(struct lookup_table *table, struct section *sec, const struct rela *rela)
@@ -3479,7 +3483,7 @@ static void kpatch_create_mcount_sections(struct kpatch_elf *kelf)
rela->type = R_X86_64_PC32;
static bool need_dynrela(struct kpatch_elf *kelf, struct lookup_table *table,
@@ -3570,7 +3574,8 @@ static void kpatch_create_mcount_sections(struct kpatch_elf *kelf)
}
-#else /* __powerpc64__ */
+#else /* __powerpc64__ || __aarch64__ */
{
switch(kelf->arch) {
- case PPC64: {
+ case PPC64:
+ case ARM64: {
bool found = false;
diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build
index eedf383..ad3a079 100755
--- a/kpatch-build/kpatch-build
+++ b/kpatch-build/kpatch-build
@@ -375,12 +375,58 @@ find_special_section_data_ppc64le() {
return
}
list_for_each_entry(rela, &sym->sec->rela->relas, list)
@@ -3806,6 +3811,7 @@ static void kpatch_find_func_profiling_calls(struct kpatch_elf *kelf)
+find_special_section_data_aarch64() {
+
+ [[ "$CONFIG_JUMP_LABEL" -eq 0 ]] && AWK_OPTIONS="$AWK_OPTIONS -vskip_j=1"
+
+ # If $AWK_OPTIONS are blank gawk would treat "" as a blank script
+ # shellcheck disable=SC2086
+ SPECIAL_VARS="$(readelf -wi "$VMLINUX" |
+ gawk --non-decimal-data $AWK_OPTIONS '
+ BEGIN { a = b = e = j = 0 }
+
+ # Set state if name matches
+ a == 0 && /DW_AT_name.* alt_instr[[:space:]]*$/ {a = 1; next}
+ b == 0 && /DW_AT_name.* bug_entry[[:space:]]*$/ {b = 1; next}
+ e == 0 && /DW_AT_name.* exception_table_entry[[:space:]]*$/ {e = 1; next}
+ j == 0 && /DW_AT_name.* jump_entry[[:space:]]*$/ {j = 1; next}
+
+ # Reset state unless this abbrev describes the struct size
+ a == 1 && !/DW_AT_byte_size/ { a = 0; next }
+ b == 1 && !/DW_AT_byte_size/ { b = 0; next }
+ e == 1 && !/DW_AT_byte_size/ { e = 0; next }
+ j == 1 && !/DW_AT_byte_size/ { j = 0; next }
+
+ # Now that we know the size, stop parsing for it
+ a == 1 {printf("export ALT_STRUCT_SIZE=%d\n", $4); a = 2}
+ b == 1 {printf("export BUG_STRUCT_SIZE=%d\n", $4); b = 2}
+ e == 1 {printf("export EX_STRUCT_SIZE=%d\n", $4); e = 2}
+ j == 1 {printf("export JUMP_STRUCT_SIZE=%d\n", $4); j = 2}
+
+ # Bail out once we have everything
+ a == 2 && b == 2 && e == 2 && (j == 2 || skip_j) {exit}')"
+
+ [[ -n "$SPECIAL_VARS" ]] && eval "$SPECIAL_VARS"
+
+ [[ -z "$ALT_STRUCT_SIZE" ]] && die "can't find special struct alt_instr size"
+ [[ -z "$BUG_STRUCT_SIZE" ]] && die "can't find special struct bug_entry size"
+ [[ -z "$EX_STRUCT_SIZE" ]] && die "can't find special struct exception_table_entry size"
+ [[ -z "$JUMP_STRUCT_SIZE" && "$CONFIG_JUMP_LABEL" -ne 0 ]] && die "can't find special struct jump_entry size"
+
+ return
+}
+
find_special_section_data() {
if [[ "$ARCH" = "ppc64le" ]]; then
find_special_section_data_ppc64le
return
fi
+ if [[ "$ARCH" = "aarch64" ]]; then
+ find_special_section_data_aarch64
+ return
+ fi
+
[[ "$CONFIG_PARAVIRT" -eq 0 ]] && AWK_OPTIONS="-vskip_p=1"
[[ "$CONFIG_UNWINDER_ORC" -eq 0 ]] && AWK_OPTIONS="$AWK_OPTIONS -vskip_o=1"
[[ "$CONFIG_JUMP_LABEL" -eq 0 ]] && AWK_OPTIONS="$AWK_OPTIONS -vskip_j=1"
diff --git a/kpatch-build/kpatch-elf.c b/kpatch-build/kpatch-elf.c
index 7e272e2..68d5c86 100644
--- a/kpatch-build/kpatch-elf.c
+++ b/kpatch-build/kpatch-elf.c
@@ -325,7 +325,7 @@ static void kpatch_find_func_profiling_calls(struct kpatch_elf *kelf)
list_for_each_entry(sym, &kelf->symbols, list) {
if (sym->type != STT_FUNC || !sym->sec || !sym->sec->rela)
continue;
-#ifdef __powerpc64__
+#if defined(__powerpc64__) || defined(__aarch64__)
switch(kelf->arch) {
case PPC64:
+ case ARM64:
list_for_each_entry(rela, &sym->sec->rela->relas, list) {
if (!strcmp(rela->sym->name, "_mcount")) {
sym->has_func_profiling = 1;
--
2.23.0
diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build
index 296fa48..73f8976 100755
--- a/kpatch-build/kpatch-build
+++ b/kpatch-build/kpatch-build
@@ -354,6 +354,9 @@ find_special_section_data() {
"s390x")
check[a]=true # alt_instr
;;
+ "aarch64")
+ check[a]=true # alt_instr
+ ;;
esac
# Kernel CONFIG_ features
@@ -362,6 +365,8 @@ find_special_section_data() {
[[ -n "$CONFIG_UNWINDER_ORC" ]] && check[o]=true # orc_entry
[[ -n "$CONFIG_PARAVIRT" ]] && check[p]=true # paravirt_patch_site
+ [[ "$ARCH" == "aarch64" ]] && unset check[p]
+
local c AWK_OPTIONS
for c in "${!check[@]}"; do
AWK_OPTIONS+=" -vcheck_${c}=1"
diff --git a/kpatch-build/kpatch-elf.c b/kpatch-build/kpatch-elf.c
index 58dbe1a..069e102 100644
--- a/kpatch-build/kpatch-elf.c
+++ b/kpatch-build/kpatch-elf.c
@@ -142,6 +142,8 @@ unsigned int absolute_rela_type(struct kpatch_elf *kelf)
return R_X86_64_64;
case S390:
return R_390_64;
+ case ARM64:
+ return R_AARCH64_ABS64;
default:
ERROR("unsupported arch");
}
@@ -206,6 +208,7 @@ long rela_target_offset(struct kpatch_elf *kelf, struct section *relasec,
switch(kelf->arch) {
case PPC64:
+ case ARM64:
add_off = 0;
break;
case X86_64:
@@ -261,6 +264,7 @@ unsigned int insn_length(struct kpatch_elf *kelf, void *addr)
return decoded_insn.length;
case PPC64:
+ case ARM64:
return 4;
case S390:
@@ -501,6 +505,9 @@ struct kpatch_elf *kpatch_elf_open(const char *name)
case EM_S390:
kelf->arch = S390;
break;
+ case EM_AARCH64:
+ kelf->arch = ARM64;
+ break;
default:
ERROR("Unsupported target architecture");
}
diff --git a/kpatch-build/kpatch-elf.h b/kpatch-build/kpatch-elf.h
index 3bc6e76..d887812 100644
--- a/kpatch-build/kpatch-elf.h
+++ b/kpatch-build/kpatch-elf.h
@@ -113,6 +113,7 @@ enum architecture {
PPC64 = 0x1 << 0,
X86_64 = 0x1 << 1,
S390 = 0x1 << 2,
+ ARM64 = 0x1 << 3,
};
struct kpatch_elf {
--
2.33.0

View File

@ -1,7 +1,7 @@
From 72d28d667f8f6baa88882abfc1590cce3e9e2b1f Mon Sep 17 00:00:00 2001
From cc0e2fd24f623c617ae2c171105ae2924c818007 Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Sun, 14 Nov 2021 15:57:55 +0800
Subject: [PATCH 02/24] create-diff-object: fix symbol changed sections error
Subject: [PATCH 02/37] create-diff-object: fix symbol changed sections error
on aarch64
$d is reserved symbols in aarch64, we met following error when
@ -14,10 +14,10 @@ Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
1 file changed, 2 insertions(+)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index ca55180..6c28280 100644
index 0b0b06b..3b677d3 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -865,6 +865,8 @@ static void kpatch_compare_correlated_symbol(struct symbol *sym)
@@ -892,6 +892,8 @@ static void kpatch_compare_correlated_symbol(struct symbol *sym)
if ((sym2->sec->twin && sym2->sec->twin->ignore) ||
kpatch_subsection_changed(sym1->sec, sym2->sec))
sym->status = CHANGED;
@ -27,5 +27,5 @@ index ca55180..6c28280 100644
DIFF_FATAL("symbol changed sections: %s", sym1->name);
}
--
2.23.0
2.33.0

View File

@ -1,90 +1,57 @@
From b71b6e5f46fdc3f1b709b58777cb0da7ec9fc008 Mon Sep 17 00:00:00 2001
From adafc04638712b7227328e44c0e023b5d3c46f53 Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Sun, 14 Nov 2021 17:26:59 +0800
Subject: [PATCH 03/24] create-diff-object:support
Subject: [PATCH 03/37] create-diff-object:support
kpatch_line_macro_change_only on aarch64
implement kpatch_line_macro_change_only on aarch64
Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
---
kpatch-build/create-diff-object.c | 63 +++++++++++++++++++++++++++++++
1 file changed, 63 insertions(+)
kpatch-build/create-diff-object.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 6c28280..c20f75e 100644
index 3b677d3..2ad0791 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -757,6 +757,69 @@ static bool kpatch_line_macro_change_only(struct section *sec)
@@ -647,6 +647,17 @@ static bool insn_is_load_immediate(struct kpatch_elf *kelf, void *addr)
return true;
}
+#elif __aarch64__
+#define ARM64_INSTR_LEN 4
break;
+ case ARM64:
+ /*
+ * aarch64 immediate move insns is Little-Endian:
+ *
+ * 52 80 00 41 mov w1, #0x2
+ */
+ if ((insn[3] & 0x7f) == 0x52 && (insn[2] & 0x80) == 0x80)
+ return true;
+
+static bool kpatch_line_macro_change_only(struct section *sec)
+{
+ unsigned long start1, start2, size, offset;
+ struct rela *rela;
+ int lineonly = 0, found;
+ unsigned int mov_imm_mask = ((1<<16) - 1)<<5;
+
+ if (sec->status != CHANGED ||
+ is_rela_section(sec) ||
+ !is_text_section(sec) ||
+ sec->sh.sh_size != sec->twin->sh.sh_size ||
+ !sec->rela ||
+ sec->rela->status != SAME)
+ return 0;
+
+ start1 = (unsigned long)sec->twin->data->d_buf;
+ start2 = (unsigned long)sec->data->d_buf;
+ size = sec->sh.sh_size;
+ for (offset = 0; offset < size; offset += ARM64_INSTR_LEN) {
+ if (!memcmp((void *)start1 + offset, (void *)start2 + offset,
+ ARM64_INSTR_LEN))
+ continue;
+
+ /* verify it's a mov immediate to w1 */
+ if ((*(int *)(start1 + offset) & ~mov_imm_mask) !=
+ (*(int *)(start2 + offset) & ~mov_imm_mask))
+ return 0;
+
+ found = 0;
+ list_for_each_entry(rela, &sec->rela->relas, list) {
+ if (rela->offset < offset + ARM64_INSTR_LEN)
+ continue;
+ if (rela->string)
+ continue;
+ if (!strncmp(rela->sym->name, "__warned.", 9))
+ continue;
+ if (!strncmp(rela->sym->name, "warn_slowpath_", 14) ||
+ (!strcmp(rela->sym->name, "__warn_printk")) ||
+ (!strcmp(rela->sym->name, "__might_sleep")) ||
+ (!strcmp(rela->sym->name, "___might_sleep")) ||
+ (!strcmp(rela->sym->name, "__might_fault")) ||
+ (!strcmp(rela->sym->name, "printk")) ||
+ (!strcmp(rela->sym->name, "lockdep_rcu_suspicious"))) {
+ found = 1;
+ break;
+ }
+ return 0;
+ }
+ if (!found)
+ return 0;
+
+ lineonly = 1;
+ }
+
+ if (!lineonly)
+ ERROR("no instruction changes detected for changed section %s",
+ sec->name);
+
+ return 1;
+}
#else
static bool kpatch_line_macro_change_only(struct section *sec)
{
--
2.23.0
case S390:
/* arg2: lghi %r3, imm */
if (insn[0] == 0xa7 && insn[1] == 0x39)
@@ -698,6 +709,7 @@ static bool kpatch_line_macro_change_only(struct kpatch_elf *kelf,
void *data1, *data2, *insn1, *insn2;
struct rela *r, *rela;
bool found, found_any = false;
+ unsigned int mov_imm_mask = ((1<<16) - 1)<<5;
if (sec->status != CHANGED ||
is_rela_section(sec) ||
@@ -743,6 +755,10 @@ static bool kpatch_line_macro_change_only(struct kpatch_elf *kelf,
!insn_is_load_immediate(kelf, insn2))
return false;
+ if ((*(int *)(insn1) & ~mov_imm_mask) !=
+ (*(int *)(insn2) & ~mov_imm_mask))
+ return false;
+
found = false;
list_for_each_entry(r, &sec->rela->relas, list) {
--
2.33.0

View File

@ -1,7 +1,7 @@
From f82f5ff61b8087e203a994da3911a1c5f3dee978 Mon Sep 17 00:00:00 2001
From d4c1e4f3b5cb162bff499c1f28d11cbea626f787 Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Sun, 14 Nov 2021 19:53:22 +0800
Subject: [PATCH 04/24] create-diff-object:support skip check func profiling
Subject: [PATCH 04/37] create-diff-object:support skip check func profiling
calls
when kernel support livepatch without ftrace, we can skip check
@ -13,18 +13,18 @@ Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index c20f75e..7247345 100644
index 2ad0791..02a722d 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -3773,6 +3773,7 @@ int main(int argc, char *argv[])
struct section *sec, *symtab;
@@ -3917,6 +3917,7 @@ int main(int argc, char *argv[])
struct section *relasec, *symtab;
char *orig_obj, *patched_obj, *parent_name;
char *parent_symtab, *mod_symvers, *patch_name, *output_obj;
+ char *no_profiling_calls = NULL;
memset(&arguments, 0, sizeof(arguments));
argp_parse (&argp, argc, argv, 0, NULL, &arguments);
@@ -3824,7 +3825,12 @@ int main(int argc, char *argv[])
@@ -3970,7 +3971,12 @@ int main(int argc, char *argv[])
kpatch_compare_correlated_elements(kelf_patched);
kpatch_mark_ignored_functions_same(kelf_patched);
kpatch_mark_ignored_sections_same(kelf_patched);
@ -39,5 +39,5 @@ index c20f75e..7247345 100644
kpatch_elf_free(kelf_orig);
--
2.23.0
2.33.0

View File

@ -1,7 +1,7 @@
From fb93c5a8dfbc035ade8fc40b75b85018afaeed2e Mon Sep 17 00:00:00 2001
From dbecda6959a2e0468aa75dbf647efa396a0359f7 Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Tue, 25 Feb 2020 22:44:50 -0500
Subject: [PATCH 05/24] create-diff-object: new static var should be included
Subject: [PATCH 05/37] create-diff-object: new static var should be included
Before this patch, only global variables(no referenced) will be
included by kpatch-build. But some macros put some static varibles
@ -18,10 +18,10 @@ Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
1 file changed, 16 insertions(+)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 7247345..1be4fac 100644
index 02a722d..c9ebb05 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -1909,6 +1909,21 @@ static void kpatch_include_force_elements(struct kpatch_elf *kelf)
@@ -1870,6 +1870,21 @@ static void kpatch_include_force_elements(struct kpatch_elf *kelf)
sym->include = 0;
}
@ -43,7 +43,7 @@ index 7247345..1be4fac 100644
static int kpatch_include_new_globals(struct kpatch_elf *kelf)
{
struct symbol *sym;
@@ -3839,6 +3854,7 @@ int main(int argc, char *argv[])
@@ -3985,6 +4000,7 @@ int main(int argc, char *argv[])
callbacks_exist = kpatch_include_callback_elements(kelf_patched);
kpatch_include_force_elements(kelf_patched);
new_globals_exist = kpatch_include_new_globals(kelf_patched);
@ -52,5 +52,5 @@ index 7247345..1be4fac 100644
kpatch_process_special_sections(kelf_patched, lookup);
--
2.23.0
2.33.0

View File

@ -1,7 +1,7 @@
From 80b74891e1d609d7881f9c9d29fe4828c49e2d83 Mon Sep 17 00:00:00 2001
From 17cb3696430d9d73c94174006ec9922b2285390b Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Fri, 2 Nov 2018 17:24:51 +0000
Subject: [PATCH 06/24] create-diff-object: fix correlate static local
Subject: [PATCH 06/37] create-diff-object: fix correlate static local
variables for __param section
kpatch-build correlate fail when no sections reference
@ -31,10 +31,10 @@ Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
1 file changed, 4 insertions(+)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 1be4fac..7efe7b4 100644
index c9ebb05..64b63e3 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -1277,6 +1277,10 @@ static bool kpatch_is_normal_static_local(struct symbol *sym)
@@ -1250,6 +1250,10 @@ static bool kpatch_is_normal_static_local(struct symbol *sym)
if (is_special_static(sym))
return false;
@ -46,5 +46,5 @@ index 1be4fac..7efe7b4 100644
}
--
2.23.0
2.33.0

View File

@ -1,28 +0,0 @@
From 42cfc6a9add67e23433bf431da74d6babe38be61 Mon Sep 17 00:00:00 2001
From: Zhiyu Hu <huzhiyu1@huawei.com>
Date: Fri, 28 Dec 2018 07:06:38 +0000
Subject: [PATCH 07/24] fix rodata.str problem
fix some rodata.str problem
Signed-off-by: Zhiyu Hu <huzhiyu1@huawei.com>
---
kpatch-build/create-diff-object.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 7efe7b4..18aff6d 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -1838,7 +1838,7 @@ static void kpatch_include_standard_elements(struct kpatch_elf *kelf)
!strcmp(sec->name, ".toc") ||
!strcmp(sec->name, ".rodata") ||
(!strncmp(sec->name, ".rodata.", 8) &&
- strstr(sec->name, ".str1."))) {
+ strstr(sec->name, ".str"))) {
kpatch_include_section(sec);
}
}
--
2.23.0

View File

@ -1,7 +1,7 @@
From 3d3cb8c0b294a60faaeb68e0d7361babdc1b8902 Mon Sep 17 00:00:00 2001
From 9746f100debb0c17397c47f5d3abbe7ca4bde221 Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Tue, 25 Feb 2020 23:40:37 -0500
Subject: [PATCH 08/24] livepatch-patch-hook: support no active after load
Subject: [PATCH 07/37] livepatch-patch-hook: support no active after load
suppport Don't active patch after loading the patch when
DISABLE_AFTER_LOAD is set.
@ -33,10 +33,10 @@ index 3d13ab9..b578ef3 100644
return 0;
out:
diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build
index ad3a079..c85e05a 100755
index 73f8976..00ba9ac 100755
--- a/kpatch-build/kpatch-build
+++ b/kpatch-build/kpatch-build
@@ -1176,6 +1176,11 @@ export KCFLAGS="-I$DATADIR/patch $ARCH_KCFLAGS"
@@ -1160,6 +1160,11 @@ export KCFLAGS="-I$DATADIR/patch $ARCH_KCFLAGS"
if [[ "$USE_KLP" -eq 0 ]]; then
export KCPPFLAGS="-D__KPATCH_MODULE__"
fi
@ -49,5 +49,5 @@ index ad3a079..c85e05a 100755
echo "Building patch module: $MODNAME.ko"
--
2.23.0
2.33.0

View File

@ -1,22 +1,22 @@
From 12530d7f476e8629fc7e50443f34164a43ef18b6 Mon Sep 17 00:00:00 2001
From f98adab4e8ad3333a4870aca50f9051d3fdf20c9 Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Wed, 26 Feb 2020 06:44:06 -0500
Subject: [PATCH 09/24] kpatch-build: enhance for out of tree module
Subject: [PATCH 08/37] kpatch-build: enhance for out of tree module
support set USERMODBUILDDIR to build patch for out
of tree module.
Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
---
kpatch-build/kpatch-build | 62 +++++++++++++++++++++++++++++++--------
kpatch-build/kpatch-build | 71 ++++++++++++++++++++++++++++++---------
kpatch-build/kpatch-cc | 4 ++-
2 files changed, 53 insertions(+), 13 deletions(-)
2 files changed, 58 insertions(+), 17 deletions(-)
diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build
index c85e05a..3aca1f3 100755
index 00ba9ac..139ebb1 100755
--- a/kpatch-build/kpatch-build
+++ b/kpatch-build/kpatch-build
@@ -492,7 +492,11 @@ filter_parent_obj()
@@ -444,7 +444,11 @@ filter_parent_obj()
local dir="${1}"
local file="${2}"
@ -29,7 +29,7 @@ index c85e05a..3aca1f3 100755
}
find_parent_obj() {
@@ -514,6 +518,11 @@ find_parent_obj() {
@@ -466,6 +470,11 @@ find_parent_obj() {
num="$(find . -name ".*.cmd" -print0 | xargs -0 grep -lw "$grepname" | filter_parent_obj "${pdir}" "${file}" | wc -l)"
[[ "$num" -eq 1 ]] && last_deep_find="$(dirname "$parent")"
fi
@ -41,27 +41,54 @@ index c85e05a..3aca1f3 100755
else
parent="$(grep -lw "$grepname" "$dir"/.*.cmd | filter_parent_obj "${dir}" "${file}" | head -n1)"
num="$(grep -lw "$grepname" "$dir"/.*.cmd | filter_parent_obj "${dir}" "${file}" | wc -l)"
@@ -703,6 +712,10 @@ if [[ -n "$SRCRPM" ]]; then
@@ -655,7 +664,11 @@ if [[ -n "$SRCRPM" ]]; then
ARCHVERSION="${ARCHVERSION#alt-}"
fi
-if [[ -n "$OOT_MODULE" ]] && [[ -z "$OOT_MODULE_SRCDIR" ]]; then
+if [[ -n "$USERMODBUILDDIR" ]]; then
+ OOT_MODULE="yes"
+fi
+
if [[ -n "$OOT_MODULE" ]] && [[ -z "$USERSRCDIR" ]]; then
warn "--oot-module requires --sourcedir"
+if [[ -n "$OOT_MODULE" ]] && [[ "$OOT_MODULE" != "yes" ]] && [[ -z "$OOT_MODULE_SRCDIR" ]]; then
warn "--oot-module requires --oot-module-src"
exit 1
@@ -720,7 +733,7 @@ if [[ -n "$USERSRCDIR" ]]; then
fi
SRCDIR="$USERSRCDIR"
@@ -665,7 +678,7 @@ mkdir -p "$TEMPDIR" || die "Couldn't create $TEMPDIR"
rm -rf "${TEMPDIR:?}"/*
rm -f "$LOGFILE"
- if [[ -z "$OOT_MODULE" ]]; then
+ if [[ -z "$OOT_MODULE" || "$OOT_MODULE" == "yes" ]]; then
[[ -z "$VMLINUX" ]] && VMLINUX="$SRCDIR"/vmlinux
[[ ! -e "$VMLINUX" ]] && die "can't find vmlinux"
-if [[ -n "$USERSRCDIR" ]]; then
+if [[ -n "$USERSRCDIR" ]] && [[ "$OOT_MODULE" != "yes" ]]; then
KERNEL_SRCDIR="$USERSRCDIR"
@@ -742,7 +755,7 @@ if [[ "$ARCHVERSION" =~ - ]]; then
[[ -z "$VMLINUX" ]] && VMLINUX="$KERNEL_SRCDIR"/vmlinux
@@ -685,17 +698,21 @@ if [[ -n "$USERSRCDIR" ]]; then
fi
fi
-if [[ -n "$OOT_MODULE" ]]; then
+if [[ -n "$OOT_MODULE" ]] && [[ "$OOT_MODULE" != "yes" ]]; then
ARCHVERSION="$(modinfo -F vermagic "$OOT_MODULE" | awk '{print $1}')"
fi
[[ -z "$ARCHVERSION" ]] && ARCHVERSION="$(uname -r)"
if [[ -n "$OOT_MODULE" ]]; then
- if [[ -z "$USERSRCDIR" ]]; then
+ if [[ -z "$USERSRCDIR" ]] || [[ "$OOT_MODULE" == "yes" ]]; then
KERNEL_SRCDIR="/lib/modules/$ARCHVERSION/build/"
fi
- BUILDDIR="$OOT_MODULE_SRCDIR"
+ if [[ "$OOT_MODULE" == "yes" ]]; then
+ BUILDDIR="$USERSRCDIR"
+ else
+ BUILDDIR="$OOT_MODULE_SRCDIR"
+ fi
else
BUILDDIR="$KERNEL_SRCDIR"
fi
@@ -709,7 +726,7 @@ if [[ "$ARCHVERSION" =~ - ]]; then
fi
[[ "$ARCHVERSION" =~ .el7a. ]] && ALT="-alt"
@ -70,18 +97,16 @@ index c85e05a..3aca1f3 100755
# Don't check external file.
# shellcheck disable=SC1090
@@ -870,7 +883,9 @@ fi
[[ -z "$CONFIGFILE" ]] && CONFIGFILE="$SRCDIR"/.config
@@ -851,7 +868,7 @@ fi
[[ -z "$CONFIGFILE" ]] && CONFIGFILE="$KERNEL_SRCDIR"/.config
[[ ! -e "$CONFIGFILE" ]] && die "can't find config file"
if [[ ! "$CONFIGFILE" -ef "$SRCDIR"/.config ]] ; then
- cp -f "$CONFIGFILE" "$SRCDIR/.config" || die
+ if [[ -z "$OOT_MODULE" ]] ; then
+ cp -f "$CONFIGFILE" "$SRCDIR/.config" || die
+ fi
-if [[ -z "$OOT_MODULE" && ! "$CONFIGFILE" -ef "$KERNEL_SRCDIR"/.config ]] ; then
+if [[ ! "$CONFIGFILE" -ef "$KERNEL_SRCDIR"/.config ]] ; then
cp -f "$CONFIGFILE" "$KERNEL_SRCDIR/.config" || die
fi
# kernel option checking
@@ -947,7 +962,7 @@ if [[ "$CONFIG_CC_IS_CLANG" -eq 1 ]]; then
@@ -925,7 +942,7 @@ if [[ -n "$CONFIG_CC_IS_CLANG" ]]; then
fi
if [[ "$SKIPCOMPILERCHECK" -eq 0 ]]; then
@ -90,7 +115,7 @@ index c85e05a..3aca1f3 100755
target="$OOT_MODULE"
else
target="$VMLINUX"
@@ -1005,10 +1020,16 @@ fi
@@ -987,10 +1004,16 @@ fi
# $TARGETS used as list, no quotes.
# shellcheck disable=SC2086
@ -102,14 +127,14 @@ index c85e05a..3aca1f3 100755
+fi
# Save original module symvers
-cp -f "$SRCDIR/Module.symvers" "$TEMPDIR/Module.symvers" || die
-cp -f "$BUILDDIR/Module.symvers" "$TEMPDIR/Module.symvers" || die
+if [[ "$OOT_MODULE" != "yes" ]]; then
+ cp -f "$SRCDIR/Module.symvers" "$TEMPDIR/Module.symvers" || die
+ cp -f "$BUILDDIR/Module.symvers" "$TEMPDIR/Module.symvers" || die
+fi
echo "Building patched source"
apply_patches
@@ -1018,7 +1039,12 @@ export KPATCH_GCC_SRCDIR="$SRCDIR"
@@ -1000,7 +1023,12 @@ export KPATCH_GCC_SRCDIR="$BUILDDIR"
save_env
# $TARGETS used as list, no quotes.
# shellcheck disable=SC2086
@ -123,53 +148,52 @@ index c85e05a..3aca1f3 100755
# source.c:(.section+0xFF): undefined reference to `symbol'
grep "undefined reference" "$LOGFILE" | sed -r "s/^.*\`(.*)'$/\\1/" \
@@ -1033,7 +1059,7 @@ fi
@@ -1015,7 +1043,7 @@ fi
[[ -n "$OOT_MODULE" ]] || grep -q vmlinux "$SRCDIR/Module.symvers" || die "truncated $SRCDIR/Module.symvers file"
grep -q vmlinux "$KERNEL_SRCDIR/Module.symvers" || die "truncated $KERNEL_SRCDIR/Module.symvers file"
-if [[ "$CONFIG_MODVERSIONS" -eq 1 ]]; then
+if [[ "$CONFIG_MODVERSIONS" -eq 1 ]] && [[ "$OOT_MODULE" != "yes" ]]; then
-if [[ -n "$CONFIG_MODVERSIONS" ]]; then
+if [[ -n "$CONFIG_MODVERSIONS" ]] && [[ "$OOT_MODULE" != "yes" ]]; then
trace_off "reading Module.symvers"
while read -ra sym_line; do
if [[ ${#sym_line[@]} -lt 4 ]]; then
die "Malformed ${TEMPDIR}/Module.symvers file"
@@ -1061,7 +1087,11 @@ fi
@@ -1045,7 +1073,11 @@ fi
for i in $(cat "$TEMPDIR/changed_objs")
do
mkdir -p "$TEMPDIR/patched/$(dirname "$i")" || die
- cp -f "$SRCDIR/$i" "$TEMPDIR/patched/$i" || die
- cp -f "$BUILDDIR/$i" "$TEMPDIR/patched/$i" || die
+ if [ -z "$USERMODBUILDDIR" ];then
+ cp -f "$SRCDIR/$i" "$TEMPDIR/patched/$i" || die
+ cp -f "$BUILDDIR/$i" "$TEMPDIR/patched/$i" || die
+ else
+ cp -f "$i" "$TEMPDIR/patched/$i" || die
+ fi
done
echo "Extracting new and modified ELF sections"
@@ -1095,7 +1125,7 @@ CHANGED=0
@@ -1079,7 +1111,7 @@ CHANGED=0
ERROR=0
# Prepare OOT module symvers file
-if [[ -n "$OOT_MODULE" ]]; then
+if [[ -n "$OOT_MODULE" ]] && [[ "$OOT_MODULE" != "yes" ]]; then
BUILDDIR="/lib/modules/$ARCHVERSION/build/"
cp -f "$SRCDIR/Module.symvers" "$TEMPDIR/Module.symvers" || die
awk '{ print $1 "\t" $2 "\t" $3 "\t" $4}' "${BUILDDIR}/Module.symvers" >> "$TEMPDIR/Module.symvers"
@@ -1131,6 +1161,14 @@ for i in $FILES; do
cp -f "$OOT_MODULE_SRCDIR/Module.symvers" "$TEMPDIR/Module.symvers" || die
awk '{ print $1 "\t" $2 "\t" $3 "\t" $4}' "${KERNEL_SRCDIR}/Module.symvers" >> "$TEMPDIR/Module.symvers"
fi
@@ -1115,6 +1147,13 @@ for i in $FILES; do
KOBJFILE_PATH="${TEMPDIR}/module/$KOBJFILE"
SYMTAB="${KOBJFILE_PATH}.symtab"
SYMVERS_FILE="$SRCDIR/Module.symvers"
SYMVERS_FILE="$BUILDDIR/Module.symvers"
+
+ if [ "$OOT_MODULE" == "yes" ];then
+ BUILDDIR="/lib/modules/$ARCHVERSION/build/"
+ SYMVERS_FILE="$TEMPDIR/Module.symvers"
+ [[ -e $SRCDIR/Module.symvers ]] && cp "$SRCDIR/Module.symvers" "$SYMVERS_FILE"
+ [[ -e $BUILDDIR/Module.symvers ]] && cp "$BUILDDIR/Module.symvers" "$SYMVERS_FILE"
+ [[ -e $USERMODBUILDDIR/Module.symvers ]] && cp "$USERMODBUILDDIR/Module.symvers" $SYMVERS_FILE
+ awk '{ print $1 "\t" $2 "\t" $3 "\t" $4}' "${BUILDDIR}/Module.symvers" >> "$SYMVERS_FILE"
+ awk '{ print $1 "\t" $2 "\t" $3 "\t" $4}' "${KERNEL_SRCDIR}/Module.symvers" >> "$SYMVERS_FILE"
+ fi
fi
readelf -s --wide "$KOBJFILE_PATH" > "$SYMTAB"
@@ -1283,7 +1321,7 @@ fi
"$READELF" -s --wide "$KOBJFILE_PATH" > "$SYMTAB"
@@ -1263,7 +1302,7 @@ fi
# column containing lines unique to first file.
UNDEFINED=$(comm -23 <(sort -u "${TEMPDIR}"/undefined_references) \
<(sort -u "${TEMPDIR}"/new_symbols) | tr '\n' ' ')
@ -179,13 +203,13 @@ index c85e05a..3aca1f3 100755
cp -f "$TEMPDIR/patch/$MODNAME.ko" "$BASE" || die
diff --git a/kpatch-build/kpatch-cc b/kpatch-build/kpatch-cc
index 476436f..7ee1655 100755
index 6f0063e..991bcad 100755
--- a/kpatch-build/kpatch-cc
+++ b/kpatch-build/kpatch-cc
@@ -24,7 +24,9 @@ if [[ "$TOOLCHAINCMD" =~ ^(.*-)?gcc$ || "$TOOLCHAINCMD" =~ ^(.*-)?clang$ ]] ; th
[[ "$obj" = */.tmp_*.o ]] && obj="${obj/.tmp_/}"
relobj=${obj//$KPATCH_GCC_SRCDIR\//}
relobj=${obj##$KPATCH_GCC_SRCDIR/}
- case "$relobj" in
+ tmpobj=$(readlink -f $obj)
+ relobj2=${tmpobj//$KPATCH_GCC_SRCDIR\//}
@ -194,5 +218,5 @@ index 476436f..7ee1655 100755
*built-in.o|\
*built-in.a|\
--
2.23.0
2.33.0

View File

@ -1,7 +1,7 @@
From 86bae0f77f1e11f6b64eb950c739f7c6b444eb43 Mon Sep 17 00:00:00 2001
From 413d7e988102a6cd085650909c98d54656295de9 Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Wed, 26 Feb 2020 07:36:59 -0500
Subject: [PATCH 10/24] support c++ kernel module
Subject: [PATCH 09/37] support c++ kernel module
support GNU_UNIQUE type symbols.
support .group section corelation.
@ -16,10 +16,10 @@ Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
4 files changed, 45 insertions(+), 20 deletions(-)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 18aff6d..5903803 100644
index 64b63e3..7e415dd 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -539,7 +539,7 @@ static void kpatch_compare_correlated_nonrela_section(struct section *sec)
@@ -554,7 +554,7 @@ static void kpatch_compare_correlated_nonrela_section(struct section *sec)
{
struct section *sec1 = sec, *sec2 = sec->twin;
@ -28,7 +28,7 @@ index 18aff6d..5903803 100644
memcmp(sec1->data->d_buf, sec2->data->d_buf, sec1->data->d_size))
sec->status = CHANGED;
else
@@ -555,7 +555,7 @@ static void kpatch_compare_correlated_section(struct section *sec)
@@ -570,7 +570,7 @@ static void kpatch_compare_correlated_section(struct section *sec)
sec1->sh.sh_flags != sec2->sh.sh_flags ||
sec1->sh.sh_entsize != sec2->sh.sh_entsize ||
(sec1->sh.sh_addralign != sec2->sh.sh_addralign &&
@ -37,7 +37,7 @@ index 18aff6d..5903803 100644
DIFF_FATAL("%s section header details differ from %s", sec1->name, sec2->name);
/* Short circuit for mcount sections, we rebuild regardless */
@@ -1024,6 +1024,34 @@ static void kpatch_correlate_section(struct section *sec_orig,
@@ -1006,6 +1006,34 @@ static void kpatch_correlate_section(struct section *sec_orig,
kpatch_correlate_symbol(sec_orig->sym, sec_patched->sym);
}
@ -72,7 +72,7 @@ index 18aff6d..5903803 100644
static void kpatch_correlate_sections(struct list_head *seclist_orig,
struct list_head *seclist_patched)
{
@@ -1047,10 +1075,7 @@ static void kpatch_correlate_sections(struct list_head *seclist_orig,
@@ -1029,10 +1057,7 @@ static void kpatch_correlate_sections(struct list_head *seclist_orig,
* Changed group sections are currently not supported.
*/
if (sec_orig->sh.sh_type == SHT_GROUP) {
@ -84,7 +84,7 @@ index 18aff6d..5903803 100644
continue;
}
@@ -1725,17 +1750,6 @@ static void kpatch_verify_patchability(struct kpatch_elf *kelf)
@@ -1682,17 +1707,6 @@ static void kpatch_verify_patchability(struct kpatch_elf *kelf)
errs++;
}
@ -103,7 +103,7 @@ index 18aff6d..5903803 100644
* ensure we aren't including .data.* or .bss.*
* (.data.unlikely and .data.once is ok b/c it only has __warned vars)
diff --git a/kpatch-build/kpatch-cc b/kpatch-build/kpatch-cc
index 7ee1655..80d310c 100755
index 991bcad..5e241dd 100755
--- a/kpatch-build/kpatch-cc
+++ b/kpatch-build/kpatch-cc
@@ -13,7 +13,9 @@ fi
@ -118,10 +118,10 @@ index 7ee1655..80d310c 100755
if [ "$1" = "-o" ]; then
obj="$2"
diff --git a/kpatch-build/kpatch-elf.c b/kpatch-build/kpatch-elf.c
index 68d5c86..2df9105 100644
index 069e102..877deac 100644
--- a/kpatch-build/kpatch-elf.c
+++ b/kpatch-build/kpatch-elf.c
@@ -712,8 +712,14 @@ void kpatch_reindex_elements(struct kpatch_elf *kelf)
@@ -851,8 +851,14 @@ void kpatch_reindex_elements(struct kpatch_elf *kelf)
unsigned int index;
index = 1; /* elf write function handles NULL section 0 */
@ -138,10 +138,10 @@ index 68d5c86..2df9105 100644
index = 0;
list_for_each_entry(sym, &kelf->symbols, list) {
diff --git a/kpatch-build/lookup.c b/kpatch-build/lookup.c
index 0323c61..e81e934 100644
index f2596b1..829250f 100644
--- a/kpatch-build/lookup.c
+++ b/kpatch-build/lookup.c
@@ -304,6 +304,8 @@ static void symtab_read(struct lookup_table *table, char *path)
@@ -306,6 +306,8 @@ static void symtab_read(struct lookup_table *table, char *path)
table->obj_syms[i].bind = STB_GLOBAL;
} else if (!strcmp(bind, "WEAK")) {
table->obj_syms[i].bind = STB_WEAK;
@ -150,7 +150,7 @@ index 0323c61..e81e934 100644
} else {
ERROR("unknown symbol bind %s", bind);
}
@@ -528,7 +530,8 @@ static bool lookup_global_symbol(struct lookup_table *table, char *name,
@@ -530,7 +532,8 @@ static bool lookup_global_symbol(struct lookup_table *table, char *name,
memset(result, 0, sizeof(*result));
for_each_obj_symbol(i, sym, table) {
@ -161,5 +161,5 @@ index 0323c61..e81e934 100644
if (result->objname)
--
2.23.0
2.33.0

View File

@ -1,7 +1,7 @@
From 34a0c47eb0f786222b3f2e1fe544f71687920943 Mon Sep 17 00:00:00 2001
From 4821b72a908ed4ded1f0a37afa238af62d0f778a Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Wed, 26 Feb 2020 22:03:55 -0500
Subject: [PATCH 11/24] symbol lookup enhancement
Subject: [PATCH 10/37] symbol lookup enhancement
For symbols which have same name in one module or have
length longger than KSYM_NAME_LEN(128 bytes). we add
@ -44,10 +44,10 @@ index da4f6a0..9df7818 100644
struct kpatch_pre_patch_callback {
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 5903803..ea1e01b 100644
index 7e415dd..e11a900 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -3032,6 +3032,14 @@ static void kpatch_create_patches_sections(struct kpatch_elf *kelf,
@@ -3087,6 +3087,14 @@ static void kpatch_create_patches_sections(struct kpatch_elf *kelf,
funcs[index].old_size = symbol.size;
funcs[index].new_size = sym->sym.st_size;
funcs[index].sympos = symbol.sympos;
@ -62,17 +62,17 @@ index 5903803..ea1e01b 100644
/*
* Add a relocation that will populate the
@@ -3050,7 +3058,8 @@ static void kpatch_create_patches_sections(struct kpatch_elf *kelf,
@@ -3105,7 +3113,8 @@ static void kpatch_create_patches_sections(struct kpatch_elf *kelf,
ALLOC_LINK(rela, &relasec->relas);
rela->sym = strsym;
rela->type = ABSOLUTE_RELA_TYPE;
rela->type = absolute_rela_type(kelf);
- rela->addend = offset_of_string(&kelf->strings, sym->name);
+ rela->addend = offset_of_string(&kelf->strings,
+ strndup(sym->name, KSYM_NAME_LEN-1));
rela->offset = (unsigned int)(index * sizeof(*funcs) +
offsetof(struct kpatch_patch_func, name));
@@ -3274,6 +3283,7 @@ static void kpatch_create_intermediate_sections(struct kpatch_elf *kelf,
@@ -3345,6 +3354,7 @@ static void kpatch_create_intermediate_sections(struct kpatch_elf *kelf,
bool special;
bool vmlinux = !strcmp(objname, "vmlinux");
struct special_section *s;
@ -80,7 +80,7 @@ index 5903803..ea1e01b 100644
/* count rela entries that need to be dynamic */
nr = 0;
@@ -3370,12 +3380,34 @@ static void kpatch_create_intermediate_sections(struct kpatch_elf *kelf,
@@ -3445,12 +3455,34 @@ static void kpatch_create_intermediate_sections(struct kpatch_elf *kelf,
rela->sym->name, symbol.objname,
symbol.sympos);
@ -106,7 +106,7 @@ index 5903803..ea1e01b 100644
+ /* add rela to fill in ref_name field */
+ ALLOC_LINK(rela2, &krela_sec->rela->relas);
+ rela2->sym = strsym;
+ rela2->type = ABSOLUTE_RELA_TYPE;
+ rela2->type = absolute_rela_type(kelf);
+ rela2->addend = offset_of_string(&kelf->strings,
+ refsym.name);
+ rela2->offset = (unsigned int)(index * sizeof(*krelas) +
@ -116,17 +116,17 @@ index 5903803..ea1e01b 100644
ksyms[index].sympos = symbol.sympos;
ksyms[index].type = rela->sym->type;
ksyms[index].bind = rela->sym->bind;
@@ -3384,7 +3416,8 @@ static void kpatch_create_intermediate_sections(struct kpatch_elf *kelf,
@@ -3459,7 +3491,8 @@ static void kpatch_create_intermediate_sections(struct kpatch_elf *kelf,
ALLOC_LINK(rela2, &ksym_sec->rela->relas);
rela2->sym = strsym;
rela2->type = ABSOLUTE_RELA_TYPE;
rela2->type = absolute_rela_type(kelf);
- rela2->addend = offset_of_string(&kelf->strings, rela->sym->name);
+ rela2->addend = offset_of_string(&kelf->strings,
+ strndup(rela->sym->name, KSYM_NAME_LEN-1));
rela2->offset = (unsigned int)(index * sizeof(*ksyms) + \
offsetof(struct kpatch_symbol, name));
@@ -3403,6 +3436,7 @@ static void kpatch_create_intermediate_sections(struct kpatch_elf *kelf,
@@ -3478,6 +3511,7 @@ static void kpatch_create_intermediate_sections(struct kpatch_elf *kelf,
krelas[index].addend = rela->addend;
krelas[index].type = rela->type;
krelas[index].external = !vmlinux && symbol.exported;
@ -135,7 +135,7 @@ index 5903803..ea1e01b 100644
/* add rela to fill in krelas[index].dest field */
ALLOC_LINK(rela2, &krela_sec->rela->relas);
diff --git a/kpatch-build/create-klp-module.c b/kpatch-build/create-klp-module.c
index d1b03fe..547e587 100644
index e942b9e..b77028f 100644
--- a/kpatch-build/create-klp-module.c
+++ b/kpatch-build/create-klp-module.c
@@ -38,7 +38,9 @@ enum loglevel loglevel = NORMAL;
@ -200,16 +200,16 @@ index d1b03fe..547e587 100644
ERROR("error finding or adding ksym to symtab");
diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build
index 3aca1f3..722d362 100755
index 139ebb1..f6855ed 100755
--- a/kpatch-build/kpatch-build
+++ b/kpatch-build/kpatch-build
@@ -1162,6 +1162,18 @@ for i in $FILES; do
@@ -1148,6 +1148,18 @@ for i in $FILES; do
SYMTAB="${KOBJFILE_PATH}.symtab"
SYMVERS_FILE="$SRCDIR/Module.symvers"
SYMVERS_FILE="$BUILDDIR/Module.symvers"
+ unset KCFLAGS
+ remove_patches
+ cd "$SRCDIR" || die
+ cd "$BUILDDIR" || die
+ if [ -z "$USERMODBUILDDIR" ];then
+ make "-j$CPUS" $TARGETS 2>&1 | logger || die
+ else
@ -220,8 +220,8 @@ index 3aca1f3..722d362 100755
+ cd "$TEMPDIR" || die
+
if [ "$OOT_MODULE" == "yes" ];then
BUILDDIR="/lib/modules/$ARCHVERSION/build/"
SYMVERS_FILE="$TEMPDIR/Module.symvers"
[[ -e $BUILDDIR/Module.symvers ]] && cp "$BUILDDIR/Module.symvers" "$SYMVERS_FILE"
diff --git a/kpatch-build/kpatch-intermediate.h b/kpatch-build/kpatch-intermediate.h
index 2036cb3..2589959 100644
--- a/kpatch-build/kpatch-intermediate.h
@ -236,7 +236,7 @@ index 2036cb3..2589959 100644
struct kpatch_arch {
diff --git a/kpatch-build/lookup.c b/kpatch-build/lookup.c
index e81e934..238541c 100644
index 829250f..71ede78 100644
--- a/kpatch-build/lookup.c
+++ b/kpatch-build/lookup.c
@@ -45,6 +45,7 @@ struct object_symbol {
@ -247,7 +247,7 @@ index e81e934..238541c 100644
};
struct export_symbol {
@@ -297,6 +298,7 @@ static void symtab_read(struct lookup_table *table, char *path)
@@ -299,6 +300,7 @@ static void symtab_read(struct lookup_table *table, char *path)
table->obj_syms[i].addr = addr;
table->obj_syms[i].size = strtoul(size, NULL, 0);
@ -255,7 +255,7 @@ index e81e934..238541c 100644
if (!strcmp(bind, "LOCAL")) {
table->obj_syms[i].bind = STB_LOCAL;
@@ -457,6 +459,17 @@ static bool lookup_local_symbol(struct lookup_table *table,
@@ -459,6 +461,17 @@ static bool lookup_local_symbol(struct lookup_table *table,
if (sym->bind == STB_LOCAL && !strcmp(sym->name,
lookup_sym->name))
sympos++;
@ -273,7 +273,7 @@ index e81e934..238541c 100644
if (lookup_sym->lookup_table_file_sym == sym) {
in_file = 1;
@@ -527,11 +540,22 @@ static bool lookup_global_symbol(struct lookup_table *table, char *name,
@@ -529,11 +542,22 @@ static bool lookup_global_symbol(struct lookup_table *table, char *name,
{
struct object_symbol *sym;
int i;
@ -298,7 +298,7 @@ index e81e934..238541c 100644
!strcmp(sym->name, name)) {
if (result->objname)
@@ -540,7 +564,7 @@ static bool lookup_global_symbol(struct lookup_table *table, char *name,
@@ -542,7 +566,7 @@ static bool lookup_global_symbol(struct lookup_table *table, char *name,
result->objname = table->objname;
result->addr = sym->addr;
result->size = sym->size;
@ -307,7 +307,7 @@ index e81e934..238541c 100644
result->global = true;
result->exported = is_exported(table, name);
}
@@ -560,3 +584,132 @@ bool lookup_symbol(struct lookup_table *table, struct symbol *sym,
@@ -562,3 +586,132 @@ bool lookup_symbol(struct lookup_table *table, struct symbol *sym,
return lookup_exported_symbol(table, sym->name, result);
}
@ -478,5 +478,5 @@ index e1277f1..21aceb4 100644
#endif /* _LOOKUP_H_ */
--
2.23.0
2.33.0

View File

@ -1,7 +1,7 @@
From 344dfff72d5a2d574d8d7804277bf587af45743d Mon Sep 17 00:00:00 2001
From 1a7e97179174f64a99e27649c1e5ff2c322bfa26 Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Wed, 26 Feb 2020 20:28:13 -0500
Subject: [PATCH 12/24] Add running kernel symbol table to help symbol lookup
Subject: [PATCH 11/37] Add running kernel symbol table to help symbol lookup
For some duplicate symbols whose section have no other
symbols, we need running kernel symbol table to help
@ -13,7 +13,7 @@ Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
1 file changed, 73 insertions(+)
diff --git a/kpatch-build/lookup.c b/kpatch-build/lookup.c
index 238541c..2cdff67 100644
index 71ede78..d3b6ae9 100644
--- a/kpatch-build/lookup.c
+++ b/kpatch-build/lookup.c
@@ -46,6 +46,7 @@ struct object_symbol {
@ -24,7 +24,7 @@ index 238541c..2cdff67 100644
};
struct export_symbol {
@@ -409,10 +410,62 @@ static void symvers_read(struct lookup_table *table, char *path)
@@ -411,10 +412,62 @@ static void symvers_read(struct lookup_table *table, char *path)
fclose(file);
}
@ -87,7 +87,7 @@ index 238541c..2cdff67 100644
table = malloc(sizeof(*table));
if (!table)
@@ -422,6 +475,9 @@ struct lookup_table *lookup_open(char *symtab_path, char *objname,
@@ -424,6 +477,9 @@ struct lookup_table *lookup_open(char *symtab_path, char *objname,
table->objname = objname;
symtab_read(table, symtab_path);
symvers_read(table, symvers_path);
@ -97,7 +97,7 @@ index 238541c..2cdff67 100644
find_local_syms_multiple(table, kelf);
@@ -687,6 +743,23 @@ int lookup_ref_symbol_offset(struct lookup_table *table,
@@ -689,6 +745,23 @@ int lookup_ref_symbol_offset(struct lookup_table *table,
}
}
@ -122,5 +122,5 @@ index 238541c..2cdff67 100644
}
--
2.23.0
2.33.0

View File

@ -0,0 +1,125 @@
From 66c81cb4c67b21dea3be2d93edf4273346c880e0 Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Wed, 26 Feb 2020 20:43:34 -0500
Subject: [PATCH 12/37] livepatch-patch-hook: support force enable/disable
we use force to indicate function which bypass stack check
Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
---
kmod/patch/kpatch-patch.h | 1 +
kmod/patch/livepatch-patch-hook.c | 17 +++++++++++++++++
kpatch-build/kpatch-build | 17 +++++++++++++++--
3 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/kmod/patch/kpatch-patch.h b/kmod/patch/kpatch-patch.h
index 9df7818..6e39364 100644
--- a/kmod/patch/kpatch-patch.h
+++ b/kmod/patch/kpatch-patch.h
@@ -64,4 +64,5 @@ struct kpatch_post_unpatch_callback {
char *objname;
};
+extern unsigned long __kpatch_force_funcs[], __kpatch_force_funcs_end[];
#endif /* _KPATCH_PATCH_H_ */
diff --git a/kmod/patch/livepatch-patch-hook.c b/kmod/patch/livepatch-patch-hook.c
index b578ef3..71439d9 100644
--- a/kmod/patch/livepatch-patch-hook.c
+++ b/kmod/patch/livepatch-patch-hook.c
@@ -432,6 +432,16 @@ extern struct kpatch_patch_func __kpatch_funcs[], __kpatch_funcs_end[];
extern struct kpatch_patch_dynrela __kpatch_dynrelas[], __kpatch_dynrelas_end[];
#endif
+static int patch_is_func_forced(unsigned long addr)
+{
+ unsigned long *a;
+
+ for (a = __kpatch_force_funcs; a < __kpatch_force_funcs_end; a++)
+ if (*a == addr)
+ return 1;
+ return 0;
+}
+
static int __init patch_init(void)
{
struct kpatch_patch_func *kfunc;
@@ -520,6 +530,13 @@ static int __init patch_init(void)
lfunc = &lfuncs[j];
lfunc->old_name = func->kfunc->name;
lfunc->new_func = (void *)func->kfunc->new_addr;
+#if defined(__KLP_SUPPORT_FORCE__)
+#ifdef __ALL_FORCE__
+ lfunc->force = 1;
+#else
+ lfunc->force = patch_is_func_forced(func->kfunc->new_addr);
+#endif
+#endif
#ifdef HAVE_SYMPOS
lfunc->old_sympos = func->kfunc->sympos;
#else
diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build
index f6855ed..a5324db 100755
--- a/kpatch-build/kpatch-build
+++ b/kpatch-build/kpatch-build
@@ -377,7 +377,7 @@ find_special_section_data() {
# shellcheck disable=SC2086
SPECIAL_VARS="$("$READELF" -wi "$VMLINUX" |
gawk --non-decimal-data $AWK_OPTIONS '
- BEGIN { a = b = e = f = i = j = o = p = s = 0 }
+ BEGIN { a = b = e = f = i = j = o = p = s = c = d = 0 }
# Set state if name matches
check_a && a == 0 && /DW_AT_name.* alt_instr[[:space:]]*$/ {a = 1; next}
@@ -389,6 +389,7 @@ find_special_section_data() {
check_o && o == 0 && /DW_AT_name.* orc_entry[[:space:]]*$/ {o = 1; next}
check_p && p == 0 && /DW_AT_name.* paravirt_patch_site[[:space:]]*$/ {p = 1; next}
check_s && s == 0 && /DW_AT_name.* static_call_site[[:space:]]*$/ {s = 1; next}
+ c == 0 && /DW_AT_name.* klp_func[[:space:]]*$/ {c = 1; next}
# Reset state unless this abbrev describes the struct size
a == 1 && !/DW_AT_byte_size/ { a = 0; next }
@@ -400,6 +401,8 @@ find_special_section_data() {
o == 1 && !/DW_AT_byte_size/ { o = 0; next }
p == 1 && !/DW_AT_byte_size/ { p = 0; next }
s == 1 && !/DW_AT_byte_size/ { s = 0; next }
+ c == 1 && /DW_TAG_structure_type/ { c = 2; next }
+ c == 1 && /DW_AT_name.* force[[:space:]]*$/ {d = 1; next}
# Now that we know the size, stop parsing for it
a == 1 {printf("export ALT_STRUCT_SIZE=%d\n", $4); a = 2}
@@ -411,6 +414,7 @@ find_special_section_data() {
o == 1 {printf("export ORC_STRUCT_SIZE=%d\n", $4); o = 2}
p == 1 {printf("export PARA_STRUCT_SIZE=%d\n", $4); p = 2}
s == 1 {printf("export STATIC_CALL_STRUCT_SIZE=%d\n", $4); s = 2}
+ d == 1 {printf("export KLP_SUPPORT_FORCE=y\n"); d = 2}
# Bail out once we have everything
(!check_a || a == 2) &&
@@ -421,7 +425,8 @@ find_special_section_data() {
(!check_j || j == 2) &&
(!check_o || o == 2) &&
(!check_p || p == 2) &&
- (!check_s || s == 2) {exit}')"
+ (!check_s || s == 2) &&
+ c == 2 {exit}')"
[[ -n "$SPECIAL_VARS" ]] && eval "$SPECIAL_VARS"
@@ -1216,6 +1221,14 @@ if [[ -n "$DISABLE_AFTER_LOAD" ]];then
export KCPPFLAGS="-DDISABLE_AFTER_LOAD $KCPPFLAGS"
fi
+if [[ -n "$NO_STACK_CHECK" ]];then
+ export KCPPFLAGS="-D__ALL_FORCE__ $KCPPFLAGS"
+fi
+
+if [[ -n "$KLP_SUPPORT_FORCE" ]];then
+ export KCPPFLAGS="-D__KLP_SUPPORT_FORCE__ $KCPPFLAGS"
+fi
+
save_env
echo "Building patch module: $MODNAME.ko"
--
2.33.0

View File

@ -1,7 +1,7 @@
From d28c18b094c18118427eadb4c63ab73cf64af4e6 Mon Sep 17 00:00:00 2001
From 5e9f742fae2faef7ce30acd3bcf0f3085f55a0f6 Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Wed, 26 Feb 2020 21:01:02 -0500
Subject: [PATCH 14/24] kpatch-build: ignore debuginfo in patch
Subject: [PATCH 13/37] kpatch-build: ignore debuginfo in patch
Just ignore all .debug_* sections
@ -12,10 +12,10 @@ Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
2 files changed, 19 insertions(+)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index ea1e01b..8c5af6b 100644
index e11a900..9b966e8 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -2714,6 +2714,23 @@ static void kpatch_include_debug_sections(struct kpatch_elf *kelf)
@@ -2763,6 +2763,23 @@ static void kpatch_include_debug_sections(struct kpatch_elf *kelf)
}
}
@ -39,7 +39,7 @@ index ea1e01b..8c5af6b 100644
static void kpatch_mark_ignored_sections(struct kpatch_elf *kelf)
{
struct section *sec, *strsec, *ignoresec;
@@ -3908,6 +3925,7 @@ int main(int argc, char *argv[])
@@ -4054,6 +4071,7 @@ int main(int argc, char *argv[])
new_globals_exist = kpatch_include_new_globals(kelf_patched);
kpatch_include_new_static_var(kelf_patched);
kpatch_include_debug_sections(kelf_patched);
@ -48,10 +48,10 @@ index ea1e01b..8c5af6b 100644
kpatch_process_special_sections(kelf_patched, lookup);
diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build
index 9a98bfc..a0d8ba8 100755
index a5324db..84d8592 100755
--- a/kpatch-build/kpatch-build
+++ b/kpatch-build/kpatch-build
@@ -1295,6 +1295,7 @@ KPATCH_LDFLAGS="$KPATCH_LDFLAGS"
@@ -1273,6 +1273,7 @@ CROSS_COMPILE="$CROSS_COMPILE"
save_env
make "${MAKEVARS[@]}" 2>&1 | logger || die
@ -60,5 +60,5 @@ index 9a98bfc..a0d8ba8 100755
if [[ "$USE_KLP" -eq 1 ]]; then
if [[ "$USE_KLP_ARCH" -eq 0 ]]; then
--
2.23.0
2.33.0

View File

@ -1,154 +0,0 @@
From 88d2a5c88fcab0016db9347fbab41a22b9fb9a52 Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Wed, 26 Feb 2020 20:43:34 -0500
Subject: [PATCH 13/24] livepatch-patch-hook: support force enable/disable
we use force to indicate function which bypass stack check
Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
---
kmod/patch/kpatch-patch.h | 1 +
kmod/patch/livepatch-patch-hook.c | 17 +++++++++++++++++
kpatch-build/kpatch-build | 24 ++++++++++++++++++++----
3 files changed, 38 insertions(+), 4 deletions(-)
diff --git a/kmod/patch/kpatch-patch.h b/kmod/patch/kpatch-patch.h
index 9df7818..6e39364 100644
--- a/kmod/patch/kpatch-patch.h
+++ b/kmod/patch/kpatch-patch.h
@@ -64,4 +64,5 @@ struct kpatch_post_unpatch_callback {
char *objname;
};
+extern unsigned long __kpatch_force_funcs[], __kpatch_force_funcs_end[];
#endif /* _KPATCH_PATCH_H_ */
diff --git a/kmod/patch/livepatch-patch-hook.c b/kmod/patch/livepatch-patch-hook.c
index b578ef3..71439d9 100644
--- a/kmod/patch/livepatch-patch-hook.c
+++ b/kmod/patch/livepatch-patch-hook.c
@@ -432,6 +432,16 @@ extern struct kpatch_patch_func __kpatch_funcs[], __kpatch_funcs_end[];
extern struct kpatch_patch_dynrela __kpatch_dynrelas[], __kpatch_dynrelas_end[];
#endif
+static int patch_is_func_forced(unsigned long addr)
+{
+ unsigned long *a;
+
+ for (a = __kpatch_force_funcs; a < __kpatch_force_funcs_end; a++)
+ if (*a == addr)
+ return 1;
+ return 0;
+}
+
static int __init patch_init(void)
{
struct kpatch_patch_func *kfunc;
@@ -520,6 +530,13 @@ static int __init patch_init(void)
lfunc = &lfuncs[j];
lfunc->old_name = func->kfunc->name;
lfunc->new_func = (void *)func->kfunc->new_addr;
+#if defined(__KLP_SUPPORT_FORCE__)
+#ifdef __ALL_FORCE__
+ lfunc->force = 1;
+#else
+ lfunc->force = patch_is_func_forced(func->kfunc->new_addr);
+#endif
+#endif
#ifdef HAVE_SYMPOS
lfunc->old_sympos = func->kfunc->sympos;
#else
diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build
index 722d362..9a98bfc 100755
--- a/kpatch-build/kpatch-build
+++ b/kpatch-build/kpatch-build
@@ -383,28 +383,32 @@ find_special_section_data_aarch64() {
# shellcheck disable=SC2086
SPECIAL_VARS="$(readelf -wi "$VMLINUX" |
gawk --non-decimal-data $AWK_OPTIONS '
- BEGIN { a = b = e = j = 0 }
+ BEGIN { a = b = e = j = c = f = 0 }
# Set state if name matches
a == 0 && /DW_AT_name.* alt_instr[[:space:]]*$/ {a = 1; next}
b == 0 && /DW_AT_name.* bug_entry[[:space:]]*$/ {b = 1; next}
e == 0 && /DW_AT_name.* exception_table_entry[[:space:]]*$/ {e = 1; next}
j == 0 && /DW_AT_name.* jump_entry[[:space:]]*$/ {j = 1; next}
+ c == 0 && /DW_AT_name.* klp_func[[:space:]]*$/ {c = 1; next}
# Reset state unless this abbrev describes the struct size
a == 1 && !/DW_AT_byte_size/ { a = 0; next }
b == 1 && !/DW_AT_byte_size/ { b = 0; next }
e == 1 && !/DW_AT_byte_size/ { e = 0; next }
j == 1 && !/DW_AT_byte_size/ { j = 0; next }
+ c == 1 && /DW_TAG_structure_type/ { c = 3; next }
+ c == 1 && /DW_AT_name.* force[[:space:]]*$/ {f = 2; next}
# Now that we know the size, stop parsing for it
a == 1 {printf("export ALT_STRUCT_SIZE=%d\n", $4); a = 2}
b == 1 {printf("export BUG_STRUCT_SIZE=%d\n", $4); b = 2}
e == 1 {printf("export EX_STRUCT_SIZE=%d\n", $4); e = 2}
j == 1 {printf("export JUMP_STRUCT_SIZE=%d\n", $4); j = 2}
+ f == 2 {printf("export KLP_SUPPORT_FORCE=y\n"); f = 3}
# Bail out once we have everything
- a == 2 && b == 2 && e == 2 && (j == 2 || skip_j) {exit}')"
+ a == 2 && b == 2 && e == 2 && (j == 2 || skip_j) && c == 3 {exit}')"
[[ -n "$SPECIAL_VARS" ]] && eval "$SPECIAL_VARS"
@@ -437,7 +441,7 @@ find_special_section_data() {
# shellcheck disable=SC2086
SPECIAL_VARS="$(readelf -wi "$VMLINUX" |
gawk --non-decimal-data $AWK_OPTIONS '
- BEGIN { a = b = p = e = o = j = s = i = 0 }
+ BEGIN { a = b = p = e = o = j = s = i = c = f = 0 }
# Set state if name matches
a == 0 && /DW_AT_name.* alt_instr[[:space:]]*$/ {a = 1; next}
@@ -448,6 +452,7 @@ find_special_section_data() {
j == 0 && /DW_AT_name.* jump_entry[[:space:]]*$/ {j = 1; next}
s == 0 && /DW_AT_name.* static_call_site[[:space:]]*$/ {s = 1; next}
i == 0 && /DW_AT_name.* pi_entry[[:space:]]*$/ {i = 1; next}
+ c == 0 && /DW_AT_name.* klp_func[[:space:]]*$/ {c = 1; next}
# Reset state unless this abbrev describes the struct size
a == 1 && !/DW_AT_byte_size/ { a = 0; next }
@@ -458,6 +463,8 @@ find_special_section_data() {
j == 1 && !/DW_AT_byte_size/ { j = 0; next }
s == 1 && !/DW_AT_byte_size/ { s = 0; next }
i == 1 && !/DW_AT_byte_size/ { i = 0; next }
+ c == 1 && /DW_TAG_structure_type/ { c = 3; next }
+ c == 1 && /DW_AT_name.* force[[:space:]]*$/ {f = 2; next}
# Now that we know the size, stop parsing for it
a == 1 {printf("export ALT_STRUCT_SIZE=%d\n", $4); a = 2}
@@ -468,9 +475,10 @@ find_special_section_data() {
j == 1 {printf("export JUMP_STRUCT_SIZE=%d\n", $4); j = 2}
s == 1 {printf("export STATIC_CALL_STRUCT_SIZE=%d\n", $4); s = 2}
i == 1 {printf("export PRINTK_INDEX_STRUCT_SIZE=%d\n", $4); i = 2}
+ f == 2 {printf("export KLP_SUPPORT_FORCE=y\n"); f = 3}
# Bail out once we have everything
- a == 2 && b == 2 && (p == 2 || skip_p) && e == 2 && (o == 2 || skip_o) && (j == 2 || skip_j) && (s == 2 || skip_s) && (i == 2 || skip_i) {exit}')"
+ a == 2 && b == 2 && (p == 2 || skip_p) && e == 2 && (o == 2 || skip_o) && (j == 2 || skip_j) && (s == 2 || skip_s) && (i == 2 || skip_i) && c == 3 {exit}')"
[[ -n "$SPECIAL_VARS" ]] && eval "$SPECIAL_VARS"
@@ -1231,6 +1239,14 @@ if [[ -n "$DISABLE_AFTER_LOAD" ]];then
export KCPPFLAGS="-DDISABLE_AFTER_LOAD $KCPPFLAGS"
fi
+if [[ -n "$NO_STACK_CHECK" ]];then
+ export KCPPFLAGS="-D__ALL_FORCE__ $KCPPFLAGS"
+fi
+
+if [[ -n "$KLP_SUPPORT_FORCE" ]];then
+ export KCPPFLAGS="-D__KLP_SUPPORT_FORCE__ $KCPPFLAGS"
+fi
+
save_env
echo "Building patch module: $MODNAME.ko"
--
2.23.0

View File

@ -1,7 +1,7 @@
From 8341b9ea6b889a887577772f6adfb49e1fea1bc1 Mon Sep 17 00:00:00 2001
From 9e83f203c363d6cb88853daa0f5751501baa1d70 Mon Sep 17 00:00:00 2001
From: Bin Yang <robin.yb@huawei.com>
Date: Tue, 16 Jul 2019 14:39:27 +0800
Subject: [PATCH 15/24] add object in kpatch
Subject: [PATCH 14/37] add object in kpatch
it is required by make_hotpatch users
@ -11,10 +11,10 @@ Signed-off-by: Bin Yang <robin.yb@huawei.com>
1 file changed, 3 insertions(+)
diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build
index a0d8ba8..c21f3ca 100755
index 84d8592..a5168f5 100755
--- a/kpatch-build/kpatch-build
+++ b/kpatch-build/kpatch-build
@@ -1227,6 +1227,8 @@ echo -n "Patched objects:"
@@ -1209,6 +1209,8 @@ echo -n "Patched objects:"
for i in $(echo "${objnames[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')
do
echo -n " $i"
@ -23,7 +23,7 @@ index a0d8ba8..c21f3ca 100755
done
echo
@@ -1353,6 +1355,7 @@ UNDEFINED=$(comm -23 <(sort -u "${TEMPDIR}"/undefined_references) \
@@ -1331,6 +1333,7 @@ UNDEFINED=$(comm -23 <(sort -u "${TEMPDIR}"/undefined_references) \
[[ -z "$USERMODBUILDDIR" ]] && [[ -n "$UNDEFINED" ]] && die "Undefined symbols: $UNDEFINED"
cp -f "$TEMPDIR/patch/$MODNAME.ko" "$BASE" || die
@ -32,5 +32,5 @@ index a0d8ba8..c21f3ca 100755
[[ "$DEBUG" -eq 0 && "$SKIPCLEANUP" -eq 0 ]] && rm -f "$LOGFILE"
--
2.23.0
2.33.0

View File

@ -1,7 +1,7 @@
From 2dab7f74fecefab38fbd9c2d171e5a6090e66829 Mon Sep 17 00:00:00 2001
From 98823cdec5eeafae9b7ed17be4e909314e924111 Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Thu, 27 Feb 2020 15:36:55 -0500
Subject: [PATCH 16/24] create-diff-object: fix .orc_unwind_ip error
Subject: [PATCH 15/37] create-diff-object: fix .orc_unwind_ip error
error: .orc_unwind_ip section header details
differ from .orc_unwind_ip
@ -14,10 +14,10 @@ Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
1 file changed, 6 insertions(+)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 8c5af6b..5f51034 100644
index 9b966e8..9c70fee 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -1079,6 +1079,9 @@ static void kpatch_correlate_sections(struct list_head *seclist_orig,
@@ -1061,6 +1061,9 @@ static void kpatch_correlate_sections(struct list_head *seclist_orig,
continue;
}
@ -27,7 +27,7 @@ index 8c5af6b..5f51034 100644
kpatch_correlate_section(sec_orig, sec_patched);
break;
}
@@ -1125,6 +1128,9 @@ static void kpatch_correlate_symbols(struct list_head *symlist_orig,
@@ -1098,6 +1101,9 @@ static void kpatch_correlate_symbols(struct list_head *symlist_orig,
sym_orig->sec->twin != sym_patched->sec)
continue;
@ -38,5 +38,5 @@ index 8c5af6b..5f51034 100644
break;
}
--
2.23.0
2.33.0

View File

@ -1,7 +1,7 @@
From 78a04dd5a2a98e6442441b802e1f4aa017fae87a Mon Sep 17 00:00:00 2001
From 7d73bf5fe9d4c551424eb4868cd7081cbf0334d1 Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Mon, 2 Mar 2020 04:35:07 -0500
Subject: [PATCH 17/24] create-diff-object: add jump label support
Subject: [PATCH 16/37] create-diff-object: add jump label support
This patch processes the __jump_table special section, and
only the jump_lable used by the changed functions will be
@ -15,10 +15,10 @@ Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 5f51034..6b915ae 100644
index 9c70fee..9334cf9 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -79,6 +79,7 @@ enum subsection {
@@ -70,6 +70,7 @@ enum subsection {
enum loglevel loglevel = NORMAL;
bool KLP_ARCH;
@ -26,7 +26,7 @@ index 5f51034..6b915ae 100644
/*******************
* Data structures
@@ -2374,6 +2375,8 @@ static bool should_keep_jump_label(struct lookup_table *lookup,
@@ -2399,6 +2400,8 @@ static bool should_keep_jump_label(struct lookup_table *lookup,
if (tracepoint || dynamic_debug)
return false;
@ -35,7 +35,7 @@ index 5f51034..6b915ae 100644
/*
* This will be upgraded to an error after all jump labels have
* been reported.
@@ -2404,6 +2407,8 @@ static bool should_keep_jump_label(struct lookup_table *lookup,
@@ -2429,6 +2432,8 @@ static bool should_keep_jump_label(struct lookup_table *lookup,
if (tracepoint || dynamic_debug)
return false;
@ -44,7 +44,7 @@ index 5f51034..6b915ae 100644
/*
* This will be upgraded to an error after all jump labels have
* been reported.
@@ -2972,8 +2977,7 @@ static void kpatch_process_special_sections(struct kpatch_elf *kelf,
@@ -3027,8 +3032,7 @@ static void kpatch_process_special_sections(struct kpatch_elf *kelf,
* labels and enable tracepoints in a patched function.
*/
list_for_each_entry(sec, &kelf->sections, list) {
@ -54,7 +54,7 @@ index 5f51034..6b915ae 100644
strcmp(sec->name, "__tracepoints_ptrs") &&
strcmp(sec->name, "__tracepoints_strings"))
continue;
@@ -3865,6 +3869,7 @@ int main(int argc, char *argv[])
@@ -4009,6 +4013,7 @@ int main(int argc, char *argv[])
char *parent_symtab, *mod_symvers, *patch_name, *output_obj;
char *no_profiling_calls = NULL;
@ -63,5 +63,5 @@ index 5f51034..6b915ae 100644
argp_parse (&argp, argc, argv, 0, NULL, &arguments);
if (arguments.debug)
--
2.23.0
2.33.0

View File

@ -1,7 +1,7 @@
From 46a24818a2227ad1b6f644c2499415021522ce55 Mon Sep 17 00:00:00 2001
From 74f78de8bd7f97f4129320f944024ffaa4317c9e Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Thu, 12 Mar 2020 06:56:21 -0400
Subject: [PATCH 18/24] kpatch-build: add compile flag -fno-reorder-functions
Subject: [PATCH 17/37] kpatch-build: add compile flag -fno-reorder-functions
Sometimes function foo with static variables can be put in
.text.foo section in original binary and be put in
@ -23,11 +23,11 @@ Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build
index c21f3ca..2ead6e4 100755
index a5168f5..a73bd1b 100755
--- a/kpatch-build/kpatch-build
+++ b/kpatch-build/kpatch-build
@@ -994,7 +994,7 @@ if [[ "$ARCH" = "ppc64le" ]]; then
ARCH_KCFLAGS="-mcmodel=large -fplugin=$PLUGINDIR/ppc64le-plugin.so"
@@ -975,7 +975,7 @@ if [[ "$ARCH" = "s390x" ]]; then
ARCH_KCFLAGS="-mno-pic-data-is-text-relative -fno-section-anchors"
fi
-export KCFLAGS="-I$DATADIR/patch -ffunction-sections -fdata-sections \
@ -36,5 +36,5 @@ index c21f3ca..2ead6e4 100755
echo "Reading special section data"
--
2.23.0
2.33.0

View File

@ -1,7 +1,7 @@
From 47a9749d381f02868b4f4bbe1bc841f3f38ac1a1 Mon Sep 17 00:00:00 2001
From 240690fed2b440ec5e1a69e5c1d69cbbd064757f Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Sun, 22 Nov 2020 21:40:39 +0800
Subject: [PATCH 19/24] Fix relocation not resolved when new functions exported
Subject: [PATCH 18/37] Fix relocation not resolved when new functions exported
only
When no functions changed and new functions exported, kobject is not
@ -84,10 +84,10 @@ index 71439d9..9e56fe3 100644
ret = -ENOMEM;
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 6b915ae..0bef022 100644
index 9334cf9..2510620 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -2916,6 +2916,27 @@ static void kpatch_create_kpatch_arch_section(struct kpatch_elf *kelf, char *obj
@@ -2968,6 +2968,27 @@ static void kpatch_create_kpatch_arch_section(struct kpatch_elf *kelf, char *obj
karch_sec->sh.sh_size = karch_sec->data->d_size;
}
@ -107,7 +107,7 @@ index 6b915ae..0bef022 100644
+ /* entries[index].objname */
+ ALLOC_LINK(rela, &kobj_sec->rela->relas);
+ rela->sym = strsym;
+ rela->type = ABSOLUTE_RELA_TYPE;
+ rela->type = absolute_rela_type(kelf);
+ rela->addend = offset_of_string(&kelf->strings, objname);
+ rela->offset = (unsigned int)(offsetof(struct kpatch_object, objname));
+}
@ -115,7 +115,7 @@ index 6b915ae..0bef022 100644
static void kpatch_process_special_sections(struct kpatch_elf *kelf,
struct lookup_table *lookup)
{
@@ -3973,6 +3994,11 @@ int main(int argc, char *argv[])
@@ -4119,6 +4140,11 @@ int main(int argc, char *argv[])
kpatch_create_intermediate_sections(kelf_out, lookup, parent_name, patch_name);
kpatch_create_kpatch_arch_section(kelf_out, parent_name);
kpatch_create_callbacks_objname_rela(kelf_out, parent_name);
@ -128,5 +128,5 @@ index 6b915ae..0bef022 100644
kpatch_create_mcount_sections(kelf_out);
--
2.23.0
2.33.0

View File

@ -1,7 +1,7 @@
From a81f64c1eae14f2b0da8168ca60b3d9beb0a9fb0 Mon Sep 17 00:00:00 2001
From fbf50da80b82c2749a76181f6bd76c9ee8d2539c Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Wed, 30 Dec 2020 21:13:10 -0500
Subject: [PATCH 20/24] support remove static variables using
Subject: [PATCH 19/37] support remove static variables using
KPATCH_IGNORE_STATIC
Static variables will be removed due to compiler optimization.
@ -16,10 +16,10 @@ Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
2 files changed, 48 insertions(+), 1 deletion(-)
diff --git a/kmod/patch/kpatch-macros.h b/kmod/patch/kpatch-macros.h
index caaadbc..ee455d2 100644
index 8e09702..02d548e 100644
--- a/kmod/patch/kpatch-macros.h
+++ b/kmod/patch/kpatch-macros.h
@@ -12,6 +12,10 @@
@@ -13,6 +13,10 @@
# define __kpatch_section(section) __section(#section)
#endif
@ -31,10 +31,10 @@ index caaadbc..ee455d2 100644
* KPATCH_IGNORE_SECTION macro
*
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 0bef022..f83000b 100644
index 2510620..c90b30a 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -1345,6 +1345,40 @@ static struct rela *kpatch_find_static_twin_ref(struct section *rela_sec, struct
@@ -1319,6 +1319,40 @@ static struct rela *kpatch_find_static_twin_ref(struct section *relasec,
return NULL;
}
@ -75,7 +75,7 @@ index 0bef022..f83000b 100644
/*
* gcc renames static local variables by appending a period and a number. For
* example, __foo could be renamed to __foo.31452. Unfortunately this number
@@ -1425,6 +1459,11 @@ static void kpatch_correlate_static_local_variables(struct kpatch_elf *orig,
@@ -1399,6 +1433,11 @@ static void kpatch_correlate_static_local_variables(struct kpatch_elf *orig,
if (sym->twin)
continue;
@ -85,9 +85,9 @@ index 0bef022..f83000b 100644
+ }
+
bundled = sym == sym->sec->sym;
if (bundled && sym->sec == sec->base) {
if (bundled && sym->sec == relasec->base) {
/*
@@ -1482,6 +1521,11 @@ static void kpatch_correlate_static_local_variables(struct kpatch_elf *orig,
@@ -1456,6 +1495,11 @@ static void kpatch_correlate_static_local_variables(struct kpatch_elf *orig,
if (!kpatch_is_normal_static_local(sym))
continue;
@ -96,17 +96,17 @@ index 0bef022..f83000b 100644
+ continue;
+ }
+
if (!sec->twin && sec->base->sym) {
if (!relasec->twin && relasec->base->sym) {
struct symbol *parent = NULL;
@@ -1525,7 +1569,6 @@ static void kpatch_correlate_static_local_variables(struct kpatch_elf *orig,
@@ -1499,7 +1543,6 @@ static void kpatch_correlate_static_local_variables(struct kpatch_elf *orig,
log_normal("WARNING: unable to correlate static local variable %s used by %s, assuming variable is new\n",
sym->name,
kpatch_section_function_name(sec));
kpatch_section_function_name(relasec));
- return;
}
}
}
--
2.23.0
2.33.0

View File

@ -1,7 +1,7 @@
From b841186b9f8ced6a78953c0c109138f9aef7a53a Mon Sep 17 00:00:00 2001
From d122635200d5c9d7e6efa59745efe2e796a7f9ff Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Thu, 12 Mar 2020 05:10:55 -0400
Subject: [PATCH 22/24] use original reloc for symbols exported from modules
Subject: [PATCH 20/37] use original reloc for symbols exported from modules
symbols exported in a patch will generate a symbol version with
object module name in Module.symvers, but the symbol is actually
@ -13,10 +13,10 @@ Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index aa5c5c4..59d491d 100644
index c90b30a..deddde9 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -3317,13 +3317,7 @@ static bool need_dynrela(struct lookup_table *table, struct section *sec, const
@@ -3388,13 +3388,7 @@ static bool need_dynrela(struct kpatch_elf *kelf, struct lookup_table *table,
return false;
}
@ -32,5 +32,5 @@ index aa5c5c4..59d491d 100644
if (symbol.global) {
--
2.23.0
2.33.0

View File

@ -1,7 +1,7 @@
From 7fa14b0c6f2e42cdf76b44b1337eb27e5b777d14 Mon Sep 17 00:00:00 2001
From 2de1633802ae3bc2c4f91e536dbba830da6ad932 Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Fri, 2 Nov 2018 17:25:38 +0000
Subject: [PATCH 23/24] create-diff-object: create dynamic relocs for changed
Subject: [PATCH 21/37] create-diff-object: create dynamic relocs for changed
functions in this object
Currently, we only create dynamic relocs for changed functions of
@ -26,22 +26,22 @@ Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
1 file changed, 6 insertions(+)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 59d491d..3a12ee1 100644
index deddde9..5e216d1 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -3238,6 +3238,12 @@ static bool need_dynrela(struct lookup_table *table, struct section *sec, const
@@ -3309,6 +3309,12 @@ static bool need_dynrela(struct kpatch_elf *kelf, struct lookup_table *table,
return false;
if (rela->sym->sec) {
+ if (rela->sym->type == STT_FUNC &&
+ rela->sym->status == CHANGED &&
+ rela->sym->sec != sec->base &&
+ sec->base->sym &&
+ sec->base->sym->type == STT_FUNC)
+ rela->sym->sec != relasec->base &&
+ relasec->base->sym &&
+ relasec->base->sym->type == STT_FUNC)
+ return true;
/*
* Internal symbols usually don't need dynrelas, because they
* live in the patch module and can be relocated normally.
--
2.23.0
2.33.0

View File

@ -1,31 +0,0 @@
From 2189dd022cda1973efdc198daa0525cbd2ee5bb2 Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Fri, 17 Sep 2021 10:22:24 +0800
Subject: [PATCH 21/24] create-diff-object: fix segment fault when sec2->rela
is NULL
when patched section has no rela section, we meet segment fault in
__kpatch_correlate_section. add sec2->rela check to fix it.
Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
Signed-off-by: hubin57 <hubin57@huawei.com>
---
kpatch-build/create-diff-object.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index f83000b..aa5c5c4 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -1015,7 +1015,7 @@ static void kpatch_correlate_section(struct section *sec_orig,
__kpatch_correlate_section(sec_orig->base, sec_patched->base);
sec_orig = sec_orig->base;
sec_patched = sec_patched->base;
- } else if (sec_orig->rela) {
+ } else if (sec_orig->rela && sec_patched->rela) {
__kpatch_correlate_section(sec_orig->rela, sec_patched->rela);
}
--
2.23.0

View File

@ -1,7 +1,7 @@
From ea05261d87f22ecebcc5e4abac662960e732e33b Mon Sep 17 00:00:00 2001
From 9b611ad453be06cfb48d9352ef65166a432a8edd Mon Sep 17 00:00:00 2001
From: Zhipeng Xie <xiezhipeng1@huawei.com>
Date: Tue, 16 Nov 2021 20:21:31 +0800
Subject: [PATCH 24/24] kpatch-build: support CROSS_COMPILE
Subject: [PATCH 22/37] kpatch-build: support CROSS_COMPILE
some Makefile use $(CROSS_COMPILE)gcc to compile .o
file, append CROSS_COMPILE to MAKEVARS to make it
@ -13,17 +13,17 @@ Signed-off-by: Zhipeng Xie <xiezhipeng1@huawei.com>
1 file changed, 1 insertion(+)
diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build
index 2ead6e4..6a9e818 100755
index a73bd1b..daa9a81 100755
--- a/kpatch-build/kpatch-build
+++ b/kpatch-build/kpatch-build
@@ -1016,6 +1016,7 @@ if [ "$CONFIG_CC_IS_CLANG" -eq 1 ]; then
@@ -997,6 +997,7 @@ if [[ -n "$CONFIG_CC_IS_CLANG" ]]; then
MAKEVARS+=("HOSTCC=clang")
else
MAKEVARS+=("CC=${KPATCH_CC_PREFIX}gcc")
MAKEVARS+=("CC=${KPATCH_CC_PREFIX}${GCC}")
+ MAKEVARS+=("CROSS_COMPILE=${KPATCH_CC_PREFIX}")
fi
if [ "$CONFIG_LD_IS_LLD" -eq 1 ]; then
if [[ -n "$CONFIG_LD_IS_LLD" ]]; then
--
2.23.0
2.33.0

View File

@ -1,8 +1,8 @@
From 5b34dae2eaf57c33beb5cd4e3972a4580259a5fc Mon Sep 17 00:00:00 2001
From 906b218903a32134dcc1a1fdda606e7b41aad616 Mon Sep 17 00:00:00 2001
From: hubin <hubin73@huawei.com>
Date: Tue, 10 May 2022 15:26:25 +0800
Subject: [PATCH] livepatch-patch-hook: disable HAVE_SIMPLE_ENABLE to keep
register and unregister step of hotpatch
Subject: [PATCH 23/37] livepatch-patch-hook: disable HAVE_SIMPLE_ENABLE to
keep register and unregister step of hotpatch
Signed-off-by: Bin Hu <hubin73@huawei.com>
---
@ -23,5 +23,5 @@ index 9e56fe3..b565a6a 100644
#ifdef RHEL_RELEASE_CODE
--
2.31.0.windows.1
2.33.0

View File

@ -1,8 +1,8 @@
From f435e99fc2652cd6263f3a2fe02b0947a5279a82 Mon Sep 17 00:00:00 2001
From 4a0580c4179a3455dd3442a0de0ee9e3f4ce6896 Mon Sep 17 00:00:00 2001
From: hubin <hubin73@huawei.com>
Date: Tue, 10 May 2022 15:27:28 +0800
Subject: [PATCH 2/9] kpatch-build: add KBUILD_MODPOST_WARN=1 to avoid modpost
undefined error
Subject: [PATCH 24/37] kpatch-build: add KBUILD_MODPOST_WARN=1 to avoid
modpost undefined error
Signed-off-by: hubin <hubin73@huawei.com>
---
@ -10,10 +10,10 @@ Signed-off-by: hubin <hubin73@huawei.com>
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build
index 6a9e818..ba33a3e 100644
index daa9a81..a822708 100755
--- a/kpatch-build/kpatch-build
+++ b/kpatch-build/kpatch-build
@@ -1030,9 +1030,9 @@ fi
@@ -1011,9 +1011,9 @@ fi
# $TARGETS used as list, no quotes.
# shellcheck disable=SC2086
if [[ -z "$USERMODBUILDDIR" ]]; then
@ -25,9 +25,9 @@ index 6a9e818..ba33a3e 100644
fi
# Save original module symvers
@@ -1175,9 +1175,9 @@ for i in $FILES; do
@@ -1158,9 +1158,9 @@ for i in $FILES; do
remove_patches
cd "$SRCDIR" || die
cd "$BUILDDIR" || die
if [ -z "$USERMODBUILDDIR" ];then
- make "-j$CPUS" $TARGETS 2>&1 | logger || die
+ KBUILD_MODPOST_WARN=1 make "-j$CPUS" $TARGETS 2>&1 | logger || die
@ -37,8 +37,8 @@ index 6a9e818..ba33a3e 100644
fi
cp ${KOBJFILE} ${KOBJFILE_PATH}
apply_patches
@@ -1297,7 +1297,7 @@ KBUILD_EXTRA_SYMBOLS="$KBUILD_EXTRA_SYMBOLS" \
KPATCH_LDFLAGS="$KPATCH_LDFLAGS"
@@ -1275,7 +1275,7 @@ KPATCH_LDFLAGS="$KPATCH_LDFLAGS" \
CROSS_COMPILE="$CROSS_COMPILE"
save_env
-make "${MAKEVARS[@]}" 2>&1 | logger || die
@ -47,5 +47,5 @@ index 6a9e818..ba33a3e 100644
if [[ "$USE_KLP" -eq 1 ]]; then
--
2.31.0.windows.1
2.33.0

View File

@ -1,68 +0,0 @@
From 03a09bb210eb5b03ceb5a45452fa962efbd923d1 Mon Sep 17 00:00:00 2001
From: Joe Lawrence <joe.lawrence@redhat.com>
Date: Mon, 6 Dec 2021 09:55:06 -0500
Subject: [PATCH] create-diff-object: update for __already_done
Upstream v5.14+ kernel change a358f40600b3 ("once: implement
DO_ONCE_LITE for non-fast-path "do once" functionality") consolidated a
bunch of do-once macros into a common macro:
#define DO_ONCE_LITE_IF(condition, func, ...) \
({ \
static bool __section(".data.once") __already_done; \
...
which replaced static local variable __warned with __already_done.
Update any __warned static local checks to also look for the new
__already_done variable as well.
Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com>
---
kpatch-build/create-diff-object.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 6a06b04..442d8f8 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -320,6 +320,7 @@ static bool is_special_static(struct symbol *sym)
static char *var_names[] = {
"__key",
"__warned",
+ "__already_done.",
"__func__",
"__FUNCTION__",
"_rs",
@@ -610,7 +611,7 @@ out:
* The pattern which applies to all cases:
* 1) immediate move of the line number to %esi
* 2) (optional) string section rela
- * 3) (optional) __warned.xxxxx static local rela
+ * 3) (optional) __warned.xxxxx or __already_done.xxxxx static local rela
* 4) warn_slowpath_* or __might_sleep or some other similar rela
*/
static bool kpatch_line_macro_change_only(struct section *sec)
@@ -666,7 +667,8 @@ static bool kpatch_line_macro_change_only(struct section *sec)
continue;
if (rela->string)
continue;
- if (!strncmp(rela->sym->name, "__warned.", 9))
+ if (!strncmp(rela->sym->name, "__warned.", 9) ||
+ !strncmp(rela->sym->name, "__already_done.", 15))
continue;
if (!strncmp(rela->sym->name, "warn_slowpath_", 14) ||
(!strcmp(rela->sym->name, "__warn_printk")) ||
@@ -732,7 +734,8 @@ static bool kpatch_line_macro_change_only(struct section *sec)
continue;
if (toc_rela(rela) && toc_rela(rela)->string)
continue;
- if (!strncmp(rela->sym->name, "__warned.", 9))
+ if (!strncmp(rela->sym->name, "__warned.", 9) ||
+ !strncmp(rela->sym->name, "__already_done.", 15))
continue;
if (!strncmp(rela->sym->name, "warn_slowpath_", 14) ||
(!strcmp(rela->sym->name, "__warn_printk")) ||
--
2.23.0

View File

@ -1,8 +1,8 @@
From f1de68ea87426e7ed65dc615a46f5ce1d15df994 Mon Sep 17 00:00:00 2001
From d59f96e9287c3af1090f8f19fdd0f76b2eeedeec Mon Sep 17 00:00:00 2001
From: hubin <hubin73@huawei.com>
Date: Tue, 10 May 2022 15:27:52 +0800
Subject: [PATCH 3/9] kpatch-build: update find_parent_obj to avoid error that
two parent match same object
Subject: [PATCH 25/37] kpatch-build: update find_parent_obj to avoid error
that two parent match same object
Signed-off-by: hubin <hubin73@huawei.com>
---
@ -10,10 +10,10 @@ Signed-off-by: hubin <hubin73@huawei.com>
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build
index ba33a3e..ce163e5 100644
index a822708..5063dd7 100755
--- a/kpatch-build/kpatch-build
+++ b/kpatch-build/kpatch-build
@@ -527,8 +527,8 @@ find_parent_obj() {
@@ -476,8 +476,8 @@ find_parent_obj() {
[[ "$num" -eq 1 ]] && last_deep_find="$(dirname "$parent")"
fi
if [[ "$num" -eq 0 ]]; then
@ -25,5 +25,5 @@ index ba33a3e..ce163e5 100644
fi
else
--
2.31.0.windows.1
2.33.0

View File

@ -1,7 +1,7 @@
From b1be16f5c42bae41f15a2579cb6ce39406648e19 Mon Sep 17 00:00:00 2001
From 85881a54bcb1bbc726d968de708f598c5e2b62c6 Mon Sep 17 00:00:00 2001
From: hubin <hubin73@huawei.com>
Date: Tue, 10 May 2022 15:28:00 +0800
Subject: [PATCH 4/9] create-diff-object: fix segment fault when using
Subject: [PATCH 26/37] create-diff-object: fix segment fault when using
KPATCH_FORCE_UNSAFE
Signed-off-by: hubin <hubin73@huawei.com>
@ -10,10 +10,10 @@ Signed-off-by: hubin <hubin73@huawei.com>
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index bbb40ed..2cca6f3 100644
index 5e216d1..b27edd8 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -1969,9 +1969,14 @@ static void kpatch_include_force_elements(struct kpatch_elf *kelf)
@@ -1925,9 +1925,14 @@ static void kpatch_include_force_elements(struct kpatch_elf *kelf)
continue;
}
/* .rela.kpatch.force */
@ -30,5 +30,5 @@ index bbb40ed..2cca6f3 100644
}
--
2.31.0.windows.1
2.33.0

View File

@ -1,60 +0,0 @@
From e06664f379eab0b3f80c504c6656f805bba30e69 Mon Sep 17 00:00:00 2001
From: David Vernet <void@manifault.com>
Date: Thu, 13 Jan 2022 12:57:15 -0800
Subject: [PATCH] kpatch-build: Add missing allocation failure checks
In kpatch-build, there are a number of places where a dynamic allocation
is performed, but the allocation is not checked for a failure. The
common pattern in kpatch-build is to check whether the returned pointer
is NULL, and if so, invoke the ERROR() macro to print a message and
abort the program.
kpatch_create_mcount_sections(), CORRELATE_ELEMENT(), and
create_klp_arch_sections() all had dynamic allocations without failure
checks. This diff adjusts those callsites to properly check for a failed
allocation, and ERROR() accordingly.
Signed-off-by: David Vernet <void@manifault.com>
---
kpatch-build/create-diff-object.c | 4 ++++
kpatch-build/create-klp-module.c | 2 ++
2 files changed, 6 insertions(+)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 442d8f8..01e5d63 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -979,6 +979,8 @@ do { \
log_debug("renaming %s %s to %s\n", \
kindstr, e2->name, e1->name); \
e2->name = strdup(e1->name); \
+ if (!e2->name) \
+ ERROR("strdup"); \
} \
} while (0)
@@ -3688,6 +3690,8 @@ static void kpatch_create_mcount_sections(struct kpatch_elf *kelf)
/* Make a writable copy of the text section data */
newdata = malloc(sym->sec->data->d_size);
+ if (!newdata)
+ ERROR("malloc");
memcpy(newdata, sym->sec->data->d_buf, sym->sec->data->d_size);
sym->sec->data->d_buf = newdata;
insn = newdata;
diff --git a/kpatch-build/create-klp-module.c b/kpatch-build/create-klp-module.c
index 547e587..8ceb8f3 100644
--- a/kpatch-build/create-klp-module.c
+++ b/kpatch-build/create-klp-module.c
@@ -343,6 +343,8 @@ static void create_klp_arch_sections(struct kpatch_elf *kelf, char *strings)
new_size = old_size + base->data->d_size;
sec->data->d_buf = realloc(sec->data->d_buf, new_size);
+ if (!sec->data->d_buf)
+ ERROR("realloc");
sec->data->d_size = new_size;
sec->sh.sh_size = sec->data->d_size;
memcpy(sec->data->d_buf + old_size,
--
2.27.0

View File

@ -1,48 +0,0 @@
From 20c31ce6e82430ae0df0e8014058cfde83196ea0 Mon Sep 17 00:00:00 2001
From: Markus Boehme <markubo@amazon.com>
Date: Sat, 15 Jan 2022 01:00:39 +0100
Subject: [PATCH] create-diff-object: add support for .retpoline_sites section
Commit 134ab5bd1883 ("objtool,x86: Replace alternatives with .retpoline_sites")
in the kernel starts keeping track of retpoline thunk call sites in a
dedicated section rather than via the alternatives mechanism.
The .retpoline_sites section needs to have its entries and relocations
for changed symbols included in the patch ELF when building for kernel
5.16+ with CONFIG_RETPOLINE=y.
Signed-off-by: Markus Boehme <markubo@amazon.com>
---
kpatch-build/create-diff-object.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 01e5d63..bbb40ed 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -2233,6 +2233,11 @@ static int static_call_sites_group_size(struct kpatch_elf *kelf, int offset)
return size;
}
+
+static int retpoline_sites_group_size(struct kpatch_elf *kelf, int offset)
+{
+ return 4;
+}
#endif
#ifdef __powerpc64__
static int fixup_entry_group_size(struct kpatch_elf *kelf, int offset)
@@ -2349,6 +2354,10 @@ static struct special_section special_sections[] = {
.name = ".static_call_sites",
.group_size = static_call_sites_group_size,
},
+ {
+ .name = ".retpoline_sites",
+ .group_size = retpoline_sites_group_size,
+ },
#endif
#ifdef __powerpc64__
{
--
2.27.0

View File

@ -1,8 +1,8 @@
From 83b98afd69c8be39587bfcd2260f03b2b3082a94 Mon Sep 17 00:00:00 2001
From 7be77c200280aaf4e788dfa9b24194e847ea46fc Mon Sep 17 00:00:00 2001
From: hubin <hubin73@huawei.com>
Date: Tue, 10 May 2022 15:28:17 +0800
Subject: [PATCH 5/9] kpatch-macros: replace __section with __kpatch_section in
kpatch macro definition
Subject: [PATCH 27/37] kpatch-macros: replace __section with __kpatch_section
in kpatch macro definition
Signed-off-by: hubin <hubin73@huawei.com>
---
@ -10,10 +10,10 @@ Signed-off-by: hubin <hubin73@huawei.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kmod/patch/kpatch-macros.h b/kmod/patch/kpatch-macros.h
index ee455d2..c20b061 100644
index 02d548e..f546822 100644
--- a/kmod/patch/kpatch-macros.h
+++ b/kmod/patch/kpatch-macros.h
@@ -13,7 +13,7 @@
@@ -14,7 +14,7 @@
#endif
#define KPATCH_IGNORE_STATIC(_static) \
@ -23,5 +23,5 @@ index ee455d2..c20b061 100644
/*
--
2.31.0.windows.1
2.33.0

View File

@ -1,30 +0,0 @@
From 4d8c8102de49534bd538bb20319680ce1f1ff9ef Mon Sep 17 00:00:00 2001
From: Artem Savkov <asavkov@redhat.com>
Date: Thu, 3 Feb 2022 11:59:24 +0100
Subject: [PATCH] Fix sym->type condition in locals_match()
Second loop in locals_match() checks table_sym->type instead of
sym->type.
Fixes: 7207687 Switch to per-file lookup table pointers.
Signed-off-by: Artem Savkov <asavkov@redhat.com>
---
kpatch-build/lookup.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kpatch-build/lookup.c b/kpatch-build/lookup.c
index 0323c61..06f4b38 100644
--- a/kpatch-build/lookup.c
+++ b/kpatch-build/lookup.c
@@ -131,7 +131,7 @@ static bool locals_match(struct lookup_table *table, int idx,
break;
if (sym->bind != STB_LOCAL)
continue;
- if (sym->type != STT_FUNC && table_sym->type != STT_OBJECT)
+ if (sym->type != STT_FUNC && sym->type != STT_OBJECT)
continue;
/*
* Symbols which get discarded at link time are missing from
--
2.27.0

View File

@ -1,7 +1,7 @@
From 41334ab046ad2c89324b61f76b262228a6bc36ad Mon Sep 17 00:00:00 2001
From 66681deab6874218eedc244138dbc464daf13011 Mon Sep 17 00:00:00 2001
From: hubin <hubin73@huawei.com>
Date: Tue, 10 May 2022 15:28:26 +0800
Subject: [PATCH 6/9] create-diff-object: ignore changed of section
Subject: [PATCH 28/37] create-diff-object: ignore changed of section
__patchable_function_entries
Linux 5.10 aarch64 uses -fpatchable-function-entry=N to generate N NOPs at the
@ -17,10 +17,10 @@ Signed-off-by: hubin <hubin73@huawei.com>
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 2cca6f3..8d3f377 100644
index b27edd8..666e44c 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -3062,7 +3062,8 @@ static void kpatch_process_special_sections(struct kpatch_elf *kelf,
@@ -3103,7 +3103,8 @@ static void kpatch_process_special_sections(struct kpatch_elf *kelf,
list_for_each_entry(sec, &kelf->sections, list) {
if (strcmp(sec->name, "__tracepoints") &&
strcmp(sec->name, "__tracepoints_ptrs") &&
@ -31,5 +31,5 @@ index 2cca6f3..8d3f377 100644
sec->status = SAME;
--
2.31.0.windows.1
2.33.0

View File

@ -1,7 +1,7 @@
From e1b12b68efc7de9e3e3db52ceda2c1b713dc7cb7 Mon Sep 17 00:00:00 2001
From d0c418f1e53cbdd6e1672060cef5dccb253cf231 Mon Sep 17 00:00:00 2001
From: hubin <hubin73@huawei.com>
Date: Tue, 10 May 2022 15:28:34 +0800
Subject: [PATCH 7/9] create-diff-object: fix null pointer dereference in
Subject: [PATCH 29/37] create-diff-object: fix null pointer dereference in
kpatch_ignore_debug_section
Signed-off-by: hubin <hubin73@huawei.com>
@ -10,10 +10,10 @@ Signed-off-by: hubin <hubin73@huawei.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 8d3f377..03c877e 100644
index 666e44c..0b8c46e 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -2796,7 +2796,7 @@ static void kpatch_ignore_debug_sections(struct kpatch_elf *kelf)
@@ -2831,7 +2831,7 @@ static void kpatch_ignore_debug_sections(struct kpatch_elf *kelf)
if (is_debug_section(sec)) {
sec->include = 0;
sec->status = SAME;
@ -23,5 +23,5 @@ index 8d3f377..03c877e 100644
sec->secsym->status = SAME;
}
--
2.31.0.windows.1
2.33.0

View File

@ -1,7 +1,7 @@
From de34b86536bde114f481a73fdbf2f58b643c3e48 Mon Sep 17 00:00:00 2001
From f9413f0a3dbe3ae506c49d528d8cc5f23dc58a68 Mon Sep 17 00:00:00 2001
From: hubin <hubin73@huawei.com>
Date: Tue, 10 May 2022 15:28:46 +0800
Subject: [PATCH 8/9] create-diff-object: ignore .note.gnu.property section
Subject: [PATCH 30/37] create-diff-object: ignore .note.gnu.property section
Linux GABI introduced new .note.gnu.property section which contains a program
property note which describes special handling requirements for linker and run-time loader.
@ -18,10 +18,10 @@ Signed-off-by: hubin <hubin73@huawei.com>
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 03c877e..c2ecefa 100644
index 0b8c46e..1abf3b8 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -3063,7 +3063,8 @@ static void kpatch_process_special_sections(struct kpatch_elf *kelf,
@@ -3104,7 +3104,8 @@ static void kpatch_process_special_sections(struct kpatch_elf *kelf,
if (strcmp(sec->name, "__tracepoints") &&
strcmp(sec->name, "__tracepoints_ptrs") &&
strcmp(sec->name, "__tracepoints_strings") &&
@ -32,5 +32,5 @@ index 03c877e..c2ecefa 100644
sec->status = SAME;
--
2.31.0.windows.1
2.33.0

View File

@ -1,7 +1,7 @@
From 19b6926284ad2811f6de0ec29e0b45f3ae8b09dd Mon Sep 17 00:00:00 2001
From 9126e10f4998e84f9056b83419f56689c5bcf879 Mon Sep 17 00:00:00 2001
From: hubin <hubin73@huawei.com>
Date: Tue, 10 May 2022 15:28:55 +0800
Subject: [PATCH 9/9] create-diff-object: skip creating .kpatch.arch section
Subject: [PATCH 31/37] create-diff-object: skip creating .kpatch.arch section
for sections with empty secsym
Signed-off-by: hubin <hubin73@huawei.com>
@ -10,10 +10,10 @@ Signed-off-by: hubin <hubin73@huawei.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index c2ecefa..6b46e1f 100644
index 1abf3b8..ecc08e9 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -2952,7 +2952,7 @@ static void kpatch_create_kpatch_arch_section(struct kpatch_elf *kelf, char *obj
@@ -2990,7 +2990,7 @@ static void kpatch_create_kpatch_arch_section(struct kpatch_elf *kelf, char *obj
continue;
sec = find_section_by_name(&kelf->sections, special->name);
@ -23,5 +23,5 @@ index c2ecefa..6b46e1f 100644
/* entries[index].sec */
--
2.31.0.windows.1
2.33.0

View File

@ -1,8 +1,8 @@
From 72d80c02e16d7558bea6512116bac2b9461bf879 Mon Sep 17 00:00:00 2001
From 3112275d447899a7063f5753d2cfed4003eecf9d Mon Sep 17 00:00:00 2001
From: hubin <hubin73@huawei.com>
Date: Tue, 10 May 2022 16:12:29 +0800
Subject: [PATCH] kpatch-build: do not copy linux scripts when building OOT
module hotpatch
Subject: [PATCH 32/37] kpatch-build: do not copy linux scripts when building
OOT module hotpatch
Signed-off-by: hubin <hubin73@huawei.com>
---
@ -10,18 +10,18 @@ Signed-off-by: hubin <hubin73@huawei.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build
index ce163e5..dc5f5a5 100644
index 5063dd7..827207f 100755
--- a/kpatch-build/kpatch-build
+++ b/kpatch-build/kpatch-build
@@ -955,7 +955,7 @@ grep -q "CONFIG_GCC_PLUGIN_RANDSTRUCT=y" "$CONFIGFILE" && die "kernel option 'CO
@@ -932,7 +932,7 @@ fi
# support extended ELF sections. Disable the BTF typeinfo generation in
# link-vmlinux.sh and Makefile.modfinal since kpatch doesn't care about
# that anyway.
-if grep -q "CONFIG_DEBUG_INFO_BTF=y" "$CONFIGFILE" ; then
+if grep -q "CONFIG_DEBUG_INFO_BTF=y" "$CONFIGFILE" && [[ -z "$OOT_MODULE" ]] ; then
cp -f "$SRCDIR/scripts/link-vmlinux.sh" "$TEMPDIR/link-vmlinux.sh" || die
sed -i 's/CONFIG_DEBUG_INFO_BTF/DISABLED_FOR_KPATCH_BUILD/g' "$SRCDIR"/scripts/link-vmlinux.sh || die
-if [[ -n "$CONFIG_DEBUG_INFO_BTF" ]]; then
+if [[ -n "$CONFIG_DEBUG_INFO_BTF" ]] && [[ -z "$OOT_MODULE" ]] ; then
cp -f "$KERNEL_SRCDIR/scripts/link-vmlinux.sh" "$TEMPDIR/link-vmlinux.sh" || die
sed -i 's/CONFIG_DEBUG_INFO_BTF/DISABLED_FOR_KPATCH_BUILD/g' "$KERNEL_SRCDIR"/scripts/link-vmlinux.sh || die
--
2.31.0.windows.1
2.33.0

View File

@ -1,7 +1,8 @@
From ff93b567f3cff56e3f0c668258499acb1d511865 Mon Sep 17 00:00:00 2001
From c7a3d873d6f0655765aee36c76b41c5e54286388 Mon Sep 17 00:00:00 2001
From: hubin <hubin73@huawei.com>
Date: Mon, 23 May 2022 17:00:37 +0800
Subject: [PATCH] create-diff-object: ignore change of certain special sections
Subject: [PATCH 33/37] create-diff-object: ignore change of certain special
sections
Signed-off-by: hubin <hubin73@huawei.com>
---
@ -9,10 +10,10 @@ Signed-off-by: hubin <hubin73@huawei.com>
1 file changed, 13 insertions(+)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 6b46e1f..7fabf4d 100644
index ecc08e9..8e73584 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -3076,6 +3076,19 @@ static void kpatch_process_special_sections(struct kpatch_elf *kelf,
@@ -3117,6 +3117,19 @@ static void kpatch_process_special_sections(struct kpatch_elf *kelf,
}
}
@ -33,5 +34,5 @@ index 6b46e1f..7fabf4d 100644
}
--
2.31.0.windows.1
2.33.0

View File

@ -1,8 +1,8 @@
From 556db3ad9deab83942621e56accc711427224ca5 Mon Sep 17 00:00:00 2001
From e7781ead26083eebec1203ac81a797fd07c077c3 Mon Sep 17 00:00:00 2001
From: hubin <hubin73@huawei.com>
Date: Mon, 23 May 2022 17:08:50 +0800
Subject: [PATCH] create-diff-object: allow __jump_table section change for
module hotpatch
Subject: [PATCH 34/37] create-diff-object: allow __jump_table section change
for module hotpatch
Signed-off-by: hubin <hubin73@huawei.com>
---
@ -10,18 +10,18 @@ Signed-off-by: hubin <hubin73@huawei.com>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 7fabf4d..d7a6789 100644
index 8e73584..b0975f7 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -3493,7 +3493,7 @@ static void kpatch_create_intermediate_sections(struct kpatch_elf *kelf,
@@ -3554,7 +3554,7 @@ static void kpatch_create_intermediate_sections(struct kpatch_elf *kelf,
* special section init code (e.g., apply_paravirt)
* runs due to late module patching.
*/
- if (!KLP_ARCH && !vmlinux && special)
+ if (!KLP_ARCH && !vmlinux && special && strcmp(sec->base->name, "__jump_table"))
+ if (!KLP_ARCH && !vmlinux && special && strcmp(relasec->base->name, "__jump_table"))
ERROR("unsupported dynrela reference to symbol '%s' in module-specific special section '%s'",
rela->sym->name, sec->base->name);
rela->sym->name, relasec->base->name);
--
2.31.0.windows.1
2.33.0

View File

@ -1,8 +1,8 @@
From ec538d436364293b15e41f3c2c2a8ab389c7b043 Mon Sep 17 00:00:00 2001
From f4b25dccaac3540f8826ea637549349c0a156a40 Mon Sep 17 00:00:00 2001
From: tangbin <tangbin@cmss.chinamobile.com>
Date: Mon, 5 Sep 2022 12:09:06 -0400
Subject: [PATCH] livepatch-patch-hook: fix kpatch-build error which do not
support ftrace
Subject: [PATCH 35/37] livepatch-patch-hook: fix kpatch-build error which do
not support ftrace
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
@ -39,5 +39,5 @@ index b565a6a..5d8780c 100644
#ifdef RHEL_RELEASE_CODE
--
2.18.4
2.33.0

View File

@ -1,8 +1,8 @@
From 6b79df49055abbccd3033fbec52085b8a9d7b250 Mon Sep 17 00:00:00 2001
From cb75d02d8b8a773386ef3867457d600752a9ec4b Mon Sep 17 00:00:00 2001
From: hubin <hubin73@huawei.com>
Date: Sun, 9 Oct 2022 10:34:52 +0800
Subject: [PATCH] lookup: skip finding local symbols for object with no local
symbols
Subject: [PATCH 36/37] lookup: skip finding local symbols for object with no
local symbols
Signed-off-by: hubin <hubin73@huawei.com>
---
@ -10,7 +10,7 @@ Signed-off-by: hubin <hubin73@huawei.com>
1 file changed, 19 insertions(+)
diff --git a/kpatch-build/lookup.c b/kpatch-build/lookup.c
index b77d7a8..875605d 100644
index d3b6ae9..4b1717a 100644
--- a/kpatch-build/lookup.c
+++ b/kpatch-build/lookup.c
@@ -166,6 +166,22 @@ static bool locals_match(struct lookup_table *table, int idx,
@ -47,5 +47,5 @@ index b77d7a8..875605d 100644
if (sym->type != STT_FILE)
continue;
--
2.27.0
2.33.0

View File

@ -1,8 +1,8 @@
From 594f0810329ca074d53399f6d1927aa87607c34a Mon Sep 17 00:00:00 2001
From 4386311b1342c89a999ec2eb6828c9983ffacb65 Mon Sep 17 00:00:00 2001
From: hubin <hubin73@huawei.com>
Date: Sun, 9 Oct 2022 14:33:13 +0800
Subject: [PATCH] create-diff-object: ignore entsize change of .return_sites
section
Subject: [PATCH 37/37] create-diff-object: ignore entsize change of
.return_sites section
If a patch contains newly exported function, kernel Makefile.build
script will add one ld step when generating object file, which
@ -17,10 +17,10 @@ Signed-off-by: hubin <hubin73@huawei.com>
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index d7a6789..77ee7b2 100644
index b0975f7..49ada5f 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -555,7 +555,8 @@ static void kpatch_compare_correlated_section(struct section *sec)
@@ -569,7 +569,8 @@ static void kpatch_compare_correlated_section(struct section *sec)
/* Compare section headers (must match or fatal) */
if (sec1->sh.sh_type != sec2->sh.sh_type ||
sec1->sh.sh_flags != sec2->sh.sh_flags ||
@ -31,5 +31,5 @@ index d7a6789..77ee7b2 100644
!is_text_section(sec1) && strcmp(sec1->name, ".rodata")))
DIFF_FATAL("%s section header details differ from %s", sec1->name, sec2->name);
--
2.27.0
2.33.0

View File

@ -1,79 +0,0 @@
From fd5e883eae4d2187e1c2cd6d66b2cf6376183d0e Mon Sep 17 00:00:00 2001
From: tangbin <tangbin_yewu@cmss.chinamobile.com>
Date: Tue, 6 Sep 2022 11:03:02 -0400
Subject: [PATCH] kpatch-build: fix loading error in aarch64
When using the kernel version 4.19.90-2112.8.0.0131.oe1 in
openEuler-22.03-LTS-aarch64, there are some errors in dmesg
as follows:
[ 44.843180 < 38.388618>] klp_30: loading out-of-tree module taints kernel.
[ 44.843183 < 0.000003>] klp_30: tainting kernel with TAINT_LIVEPATCH
[ 44.843325 < 0.000142>] klp_30: module verification failed: signature and/or required key missing - t ainting kernel
[ 44.844007 < 0.000682>] WARNING: CPU: 20 PID: 7708 at kernel/trace/ftrace.c:2040 ftrace_bug+0x74/0x25 8
[ 44.844009 < 0.000002>] Modules linked in: nft_objref nf_conntrack_tftp tun nft_fib_inet nft_fib_ipv4 nft_fib_ipv6 nft_fib nft_reject_inet nf_reject_ipv4 nf_reject_ipv6 nft_reject nft_ct nf_tables_set nf_tabl es ebtable_nat ebtable_broute bridge stp llc ip6table_nat nf_nat_ipv6 ip6table_mangle ip6table_raw ip6table _security iptable_nat nf_nat_ipv4 nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 libcrc32c iptable_mangl e iptable_raw iptable_security rfkill ip_set nfnetlink ebtable_filter ebtables ip6table_filter ip6_tables i ptable_filter ip_tables sunrpc sg vfat fat sch_fq_codel fuse ext4 mbcache jbd2 sr_mod sd_mod cdrom virtio_n et virtio_gpu net_failover virtio_scsi failover aes_ce_blk crypto_simd cryptd aes_ce_cipher ghash_ce sha2_c e sha256_arm64 sha1_ce virtio_pci virtio_mmio virtio_ring virtio dm_mirror dm_region_hash
[ 44.844035 < 0.000026>] dm_log dm_mod
[ 44.844040 < 0.000005>] CPU: 20 PID: 7708 Comm: insmod Kdump: loaded Tainted: G OE K 4.19 .90+ #1
[ 44.844041 < 0.000001>] Hardware name: QEMU KVM Virtual Machine, BIOS 0.0.0 02/06/2015
[ 44.844043 < 0.000002>] pstate: 60400005 (nZCv daif +PAN -UAO)
[ 44.844045 < 0.000002>] pc : ftrace_bug+0x74/0x258
[ 44.844048 < 0.000003>] lr : ftrace_update_code.isra.0+0xe0/0x114
[ 44.844048 < 0.000000>] sp : ffff00002366fc20
[ 44.844049 < 0.000001>] x29: ffff00002366fc20 x28: ffff0000093b5d40
[ 44.844050 < 0.000001>] x27: ffff0000080a2e38 x26: ffff0000093b5000
[ 44.844051 < 0.000001>] x25: ffff000009070028 x24: 0000000002000000
[ 44.844053 < 0.000002>] x23: ffff000002270080 x22: ffff000009725000
[ 44.844054 < 0.000001>] x21: ffff000008df6650 x20: ffff000002250514
[ 44.844055 < 0.000001>] x19: ffff8000c9990050 x18: 0000000000000000
[ 44.844056 < 0.000001>] x17: 0000000000000000 x16: 0000000000000000
[ 44.844057 < 0.000001>] x15: ffff000002250514 x14: ff00000000000000
[ 44.844058 < 0.000001>] x13: 0000000000000000 x12: 0000000000000000
[ 44.844059 < 0.000001>] x11: fefefefefefefeff x10: 0000000000000000
[ 44.844060 < 0.000001>] x9 : 0000000000000000 x8 : ffff8000c9212000
[ 44.844061 < 0.000001>] x7 : ffff00002366f7f0 x6 : ffff00002366fc08
[ 44.844062 < 0.000001>] x5 : ffff00002366fc08 x4 : 000000000fffffff
[ 44.844063 < 0.000001>] x3 : ffff0000093b5d40 x2 : ffff0000093b5000
[ 44.844064 < 0.000001>] x1 : ffff0000080a2e60 x0 : 00000000ffffffea
[ 44.844066 < 0.000002>] Call trace:
[ 44.844068 < 0.000002>] ftrace_bug+0x74/0x258
[ 44.844069 < 0.000001>] ftrace_update_code.isra.0+0xe0/0x114
[ 44.844071 < 0.000002>] ftrace_process_locs.isra.0+0x118/0x1f0
[ 44.844072 < 0.000001>] ftrace_module_init+0x2c/0x34
[ 44.844078 < 0.000006>] load_module+0x3f4/0x820
[ 44.844080 < 0.000002>] __se_sys_finit_module+0xb8/0x120
[ 44.844081 < 0.000001>] __arm64_sys_finit_module+0x28/0x34
[ 44.844084 < 0.000003>] el0_svc_common+0x118/0x170
[ 44.844085 < 0.000001>] el0_svc_handler+0x3c/0x80
[ 44.844088 < 0.000003>] el0_svc+0x8/0x640
[ 44.844090 < 0.000002>] ---[ end trace dab33fa797cbe7ee ]---
[ 44.844090 < 0.000000>] ftrace failed to modify
[ 44.844093 < 0.000003>] [] 0xffff000002250514
[ 44.844093 < 0.000000>] actual: 1f:20:03:d5
[ 44.844096 < 0.000003>] Initializing ftrace call sites
[ 44.844097 < 0.000001>] ftrace record flags: 2000000
[ 44.844098 < 0.000001>] (0)
expected tramp: ffff0000080a2e3c
Thus, fix this problem.
Signed-off-by: tangbin <tangbin_yewu@cmss.chinamobile.com>
---
kpatch-build/kpatch-elf.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kpatch-build/kpatch-elf.c b/kpatch-build/kpatch-elf.c
index 2df9105..c84d865 100644
--- a/kpatch-build/kpatch-elf.c
+++ b/kpatch-build/kpatch-elf.c
@@ -325,7 +325,7 @@ static void kpatch_find_func_profiling_calls(struct kpatch_elf *kelf)
list_for_each_entry(sym, &kelf->symbols, list) {
if (sym->type != STT_FUNC || !sym->sec || !sym->sec->rela)
continue;
-#if defined(__powerpc64__) || defined(__aarch64__)
+#if defined(__powerpc64__)
list_for_each_entry(rela, &sym->sec->rela->relas, list) {
if (!strcmp(rela->sym->name, "_mcount")) {
sym->has_func_profiling = 1;
--
2.18.4

View File

@ -1,43 +0,0 @@
From 81a48ca6a060cf006cf9eec309e726c4333a9d46 Mon Sep 17 00:00:00 2001
From: tangbin <tangbin_yewu@cmss.chinamobile.com>
Date: Tue, 6 Sep 2022 11:46:41 -0400
Subject: [PATCH] kpatch-build: Remove duplicate functions
We find that there are duplicate functions of "use_klp_arch()" &
"rhel_kernel_version_gte", and one of them are useless, so remove
them.
Signed-off-by: tangbin <tangbin_yewu@cmss.chinamobile.com>
---
kpatch-build/kpatch-build | 15 ---------------
1 file changed, 15 deletions(-)
diff --git a/kpatch-build/kpatch-build b/kpatch-build/kpatch-build
index dc5f5a5..6a0645a 100755
--- a/kpatch-build/kpatch-build
+++ b/kpatch-build/kpatch-build
@@ -198,21 +198,6 @@ rhel_kernel_version_gte() {
[ "${ARCHVERSION}" = "$(echo -e "${ARCHVERSION}\\n$1" | sort -rV | head -n1)" ]
}
-# klp.arch relocations were supported prior to v5.8
-# and prior to 4.18.0-240.el8
-use_klp_arch()
-{
- if kernel_is_rhel; then
- ! rhel_kernel_version_gte 4.18.0-240.el8
- else
- ! kernel_version_gte 5.8.0
- fi
-}
-
-rhel_kernel_version_gte() {
- [ "${ARCHVERSION}" = "$(echo -e "${ARCHVERSION}\\n$1" | sort -rV | head -n1)" ]
-}
-
# klp.arch relocations were supported prior to v5.8
# and prior to 4.18.0-284.el8
use_klp_arch()
--
2.18.4

View File

@ -1,43 +0,0 @@
From 764baf9f38c15d48a7cacbafcad9b83b7a23d842 Mon Sep 17 00:00:00 2001
From: hubin <hubin73@huawei.com>
Date: Thu, 1 Sep 2022 06:13:03 +0800
Subject: [PATCH] create-diff-object: add support for .return_sites section
Signed-off-by: Jonathan Dobson <jdobson@redhat.com>
Reference:https://github.com/dynup/kpatch/commit/33368a88cdf875b0edd02b0dfd3356a7e93b24db
Conflict:kpatch-build/create-diff-object.c
---
kpatch-build/create-diff-object.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c
index 58d4763..3c55013 100644
--- a/kpatch-build/create-diff-object.c
+++ b/kpatch-build/create-diff-object.c
@@ -2242,6 +2242,11 @@ static int retpoline_sites_group_size(struct kpatch_elf *kelf, int offset)
{
return 4;
}
+
+static int return_sites_group_size(struct kpatch_elf *kelf, int offset)
+{
+ return 4;
+}
#endif
#ifdef __powerpc64__
static int fixup_entry_group_size(struct kpatch_elf *kelf, int offset)
@@ -2362,6 +2367,10 @@ static struct special_section special_sections[] = {
.name = ".retpoline_sites",
.group_size = retpoline_sites_group_size,
},
+ {
+ .name = ".return_sites",
+ .group_size = return_sites_group_size,
+ },
#endif
#ifdef __powerpc64__
{
--
2.33.0

Binary file not shown.

BIN
kpatch-0.9.7.tar.gz Normal file

Binary file not shown.

View File

@ -1,7 +1,7 @@
Name: kpatch
Epoch: 1
Version: 0.9.5
Release: 16
Version: 0.9.7
Release: 1
Summary: A Linux dynamic kernel patching infrastructure
License: GPLv2
@ -19,46 +19,37 @@ Patch0003:0003-create-diff-object-support-kpatch_line_macro_change_.patch
Patch0004:0004-create-diff-object-support-skip-check-func-profiling.patch
Patch0005:0005-create-diff-object-new-static-var-should-be-included.patch
Patch0006:0006-create-diff-object-fix-correlate-static-local-variab.patch
Patch0007:0007-fix-rodata.str-problem.patch
Patch0008:0008-livepatch-patch-hook-support-no-active-after-load.patch
Patch0009:0009-kpatch-build-enhance-for-out-of-tree-module.patch
Patch0010:0010-support-c-kernel-module.patch
Patch0011:0011-symbol-lookup-enhancement.patch
Patch0012:0012-Add-running-kernel-symbol-table-to-help-symbol-looku.patch
Patch0013:0013-livepatch-patch-hook-support-force-enable-disable.patch
Patch0014:0014-kpatch-build-ignore-debuginfo-in-patch.patch
Patch0015:0015-add-object-in-kpatch.patch
Patch0016:0016-create-diff-object-fix-.orc_unwind_ip-error.patch
Patch0017:0017-create-diff-object-add-jump-label-support.patch
Patch0018:0018-kpatch-build-add-compile-flag-fno-reorder-functions.patch
Patch0019:0019-Fix-relocation-not-resolved-when-new-functions-expor.patch
Patch0020:0020-support-remove-static-variables-using-KPATCH_IGNORE_.patch
Patch0021:0021-create-diff-object-fix-segment-fault-when-sec2-rela-.patch
Patch0022:0022-use-original-reloc-for-symbols-exported-from-modules.patch
Patch0023:0023-create-diff-object-create-dynamic-relocs-for-changed.patch
Patch0024:0024-kpatch-build-support-CROSS_COMPILE.patch
Patch0025:0025-create-diff-object-update-for-__already_done.patch
Patch0026:0026-kpatch-build-Add-missing-allocation-failure-checks.patch
Patch0027:0027-create-diff-object-add-support-for-.retpoline_sites-.patch
Patch0028:0028-Fix-sym-type-condition-in-locals_match.patch
Patch0029:0029-livepatch-patch-hook-disable-HAVE_SIMPLE_ENABLE-to-k.patch
Patch0030:0030-kpatch-build-add-KBUILD_MODPOST_WARN-1-to-avoid-modp.patch
Patch0031:0031-kpatch-build-update-find_parent_obj-to-avoid-error-t.patch
Patch0032:0032-create-diff-object-fix-segment-fault-when-using-KPAT.patch
Patch0033:0033-kpatch-macros-replace-__section-with-__kpatch_sectio.patch
Patch0034:0034-create-diff-object-ignore-changed-of-section-__patch.patch
Patch0035:0035-create-diff-object-fix-null-pointer-dereference-in-k.patch
Patch0036:0036-create-diff-object-ignore-.note.gnu.property-section.patch
Patch0037:0037-create-diff-object-skip-creating-.kpatch.arch-sectio.patch
Patch0038:0038-kpatch-build-do-not-copy-linux-scripts-when.patch
Patch0039:0039-create-diff-object-ignore-change-of-certain.patch
Patch0040:0040-create-diff-object-allow-__jump_table-section.patch
Patch0041:0041-livepatch-patch-hook-fix-kpatch-build-error-which-do.patch
Patch0042:0042-kpatch-build-fix-loading-error-in-aarch64.patch
Patch0043:0043-kpatch-build-Remove-duplicate-functions.patch
Patch0044:0044-lookup-skip-finding-local-symbols-for-object-with-no.patch
Patch0045:0045-backport-create-diff-object-add-support-for-.return_sites-sec.patch
Patch0046:0046-create-diff-object-ignore-entsize-change-of-.return_.patch
Patch0007:0007-livepatch-patch-hook-support-no-active-after-load.patch
Patch0008:0008-kpatch-build-enhance-for-out-of-tree-module.patch
Patch0009:0009-support-c-kernel-module.patch
Patch0010:0010-symbol-lookup-enhancement.patch
Patch0011:0011-Add-running-kernel-symbol-table-to-help-symbol-looku.patch
Patch0012:0012-livepatch-patch-hook-support-force-enable-disable.patch
Patch0013:0013-kpatch-build-ignore-debuginfo-in-patch.patch
Patch0014:0014-add-object-in-kpatch.patch
Patch0015:0015-create-diff-object-fix-.orc_unwind_ip-error.patch
Patch0016:0016-create-diff-object-add-jump-label-support.patch
Patch0017:0017-kpatch-build-add-compile-flag-fno-reorder-functions.patch
Patch0018:0018-Fix-relocation-not-resolved-when-new-functions-expor.patch
Patch0019:0019-support-remove-static-variables-using-KPATCH_IGNORE_.patch
Patch0020:0020-use-original-reloc-for-symbols-exported-from-modules.patch
Patch0021:0021-create-diff-object-create-dynamic-relocs-for-changed.patch
Patch0022:0022-kpatch-build-support-CROSS_COMPILE.patch
Patch0023:0023-livepatch-patch-hook-disable-HAVE_SIMPLE_ENABLE-to-k.patch
Patch0024:0024-kpatch-build-add-KBUILD_MODPOST_WARN-1-to-avoid-modp.patch
Patch0025:0025-kpatch-build-update-find_parent_obj-to-avoid-error-t.patch
Patch0026:0026-create-diff-object-fix-segment-fault-when-using-KPAT.patch
Patch0027:0027-kpatch-macros-replace-__section-with-__kpatch_sectio.patch
Patch0028:0028-create-diff-object-ignore-changed-of-section-__patch.patch
Patch0029:0029-create-diff-object-fix-null-pointer-dereference-in-k.patch
Patch0030:0030-create-diff-object-ignore-.note.gnu.property-section.patch
Patch0031:0031-create-diff-object-skip-creating-.kpatch.arch-sectio.patch
Patch0032:0032-kpatch-build-do-not-copy-linux-scripts-when-building.patch
Patch0033:0033-create-diff-object-ignore-change-of-certain-special-.patch
Patch0034:0034-create-diff-object-allow-__jump_table-section-change.patch
Patch0035:0035-livepatch-patch-hook-fix-kpatch-build-error-which-do.patch
Patch0036:0036-lookup-skip-finding-local-symbols-for-object-with-no.patch
Patch0037:0037-create-diff-object-ignore-entsize-change-of-.return_.patch
BuildRequires: gcc elfutils-libelf-devel kernel-devel git
Requires: bc make gcc patch bison flex openssl-devel
@ -119,6 +110,12 @@ popd
%{_mandir}/man1/*.1.gz
%changelog
* Mon Jan 30 2023 Bin Hu <hubin73@huawei.com> -1:0.9.7-1
- Type:enhancement
- ID:NA
- SUG:NA
- DESC:upgrade kpatch to version 0.9.7
* Mon Oct 17 2022 lvgenggeng <lvgenggeng@uniontech.com> - 1:0.9.5-16
- Type:enhancement
- ID:NA