From 608e39de485d831c637bb868dcc61692b1a28201 Mon Sep 17 00:00:00 2001 From: wangxiao65 Date: Wed, 4 Sep 2024 09:58:50 +0000 Subject: [PATCH] Make stp task work compatable with 6.11 kernels --- ...sk_work-compatible-with-6.11-kernels.patch | 99 +++++++++++++++++++ systemtap.spec | 9 +- 2 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 Make-stp_task_work-compatible-with-6.11-kernels.patch diff --git a/Make-stp_task_work-compatible-with-6.11-kernels.patch b/Make-stp_task_work-compatible-with-6.11-kernels.patch new file mode 100644 index 0000000..e1b3a0c --- /dev/null +++ b/Make-stp_task_work-compatible-with-6.11-kernels.patch @@ -0,0 +1,99 @@ +From a64dc4e2e0195ca80c6509df511a42459b40e9af Mon Sep 17 00:00:00 2001 +From: Martin Cermak +Date: Wed, 24 Jul 2024 16:47:42 +0200 +Subject: [PATCH] Make stp_task_work compatible with 6.11 kernels + +Update systemtap runtime so that it works with kernel commit +68cbd415dd4b task_work: + +s/task_work_cancel()/task_work_cancel_func()/ +--- + buildrun.cxx | 1 + + .../linux/autoconf-task_work_cancel_func.c | 3 +++ + runtime/linux/runtime.h | 2 +- + runtime/stp_task_work.c | 21 ++++++++++++++----- + 4 files changed, 21 insertions(+), 6 deletions(-) + create mode 100644 runtime/linux/autoconf-task_work_cancel_func.c + +diff --git a/buildrun.cxx b/buildrun.cxx +index a7fcd6297..e3f2f83d1 100644 +--- a/buildrun.cxx ++++ b/buildrun.cxx +@@ -400,6 +400,7 @@ compile_pass (systemtap_session& s) + output_exportconf(s, o2, "__module_text_address", "STAPCONF_MODULE_TEXT_ADDRESS"); + output_exportconf(s, o2, "add_timer_on", "STAPCONF_ADD_TIMER_ON"); + output_autoconf(s, o, cs, "autoconf-514-panic.c", "STAPCONF_514_PANIC", NULL); ++ output_autoconf(s, o, cs, "autoconf-task_work_cancel_func.c", "STAPCONF_TASK_WORK_CANCEL_FUNC", NULL); + + output_dual_exportconf(s, o2, "probe_kernel_read", "probe_kernel_write", "STAPCONF_PROBE_KERNEL"); + output_autoconf(s, o, cs, "autoconf-hw_breakpoint_context.c", +diff --git a/runtime/linux/autoconf-task_work_cancel_func.c b/runtime/linux/autoconf-task_work_cancel_func.c +new file mode 100644 +index 000000000..0d460de6c +--- /dev/null ++++ b/runtime/linux/autoconf-task_work_cancel_func.c +@@ -0,0 +1,3 @@ ++#include ++ ++void* c = & task_work_cancel_func; +diff --git a/runtime/linux/runtime.h b/runtime/linux/runtime.h +index 0e9fe3fea..bd9307385 100644 +--- a/runtime/linux/runtime.h ++++ b/runtime/linux/runtime.h +@@ -265,7 +265,7 @@ static void *kallsyms_uprobe_get_swbp_addr; + static void *kallsyms_task_work_add; + #endif + #if !defined(STAPCONF_TASK_WORK_CANCEL_EXPORTED) +-static void *kallsyms_task_work_cancel; ++static void *kallsyms_task_work_cancel_fn; + #endif + + #if !defined(STAPCONF_TRY_TO_WAKE_UP_EXPORTED) && !defined(STAPCONF_WAKE_UP_STATE_EXPORTED) +diff --git a/runtime/stp_task_work.c b/runtime/stp_task_work.c +index 0dd3095b6..4818fecbf 100644 +--- a/runtime/stp_task_work.c ++++ b/runtime/stp_task_work.c +@@ -3,14 +3,25 @@ + + #include "linux/task_work_compatibility.h" + ++// Handle kernel commit 68cbd415dd4b9c5b9df69f0f091879e56bf5907a ++// task_work: s/task_work_cancel()/task_work_cancel_func()/ ++#if defined(STAPCONF_TASK_WORK_CANCEL_FUNC) ++#define TASK_WORK_CANCEL_FN task_work_cancel_func ++#else ++#define TASK_WORK_CANCEL_FN task_work_cancel ++#endif ++ ++#define STRINGIFY(x) #x ++#define TOSTRING(x) STRINGIFY(x) ++ + #if !defined(STAPCONF_TASK_WORK_ADD_EXPORTED) + // First typedef from the original decls, then #define as typecasted calls. + typedef typeof(&task_work_add) task_work_add_fn; + #define task_work_add(a,b,c) ibt_wrapper(int, (* (task_work_add_fn)kallsyms_task_work_add)((a), (b), (c))) + #endif + #if !defined(STAPCONF_TASK_WORK_CANCEL_EXPORTED) +-typedef typeof(&task_work_cancel) task_work_cancel_fn; +-#define task_work_cancel(a,b) ibt_wrapper(struct callback_head *, (* (task_work_cancel_fn)kallsyms_task_work_cancel)((a), (b))) ++typedef typeof(&TASK_WORK_CANCEL_FN) task_work_cancel_fn; ++#define task_work_cancel(a,b) ibt_wrapper(struct callback_head *, (* (task_work_cancel_fn)kallsyms_task_work_cancel_fn)((a), (b))) + #endif + + /* To avoid a crash when a task_work callback gets called after the +@@ -35,9 +46,9 @@ stp_task_work_init(void) + } + #endif + #if !defined(STAPCONF_TASK_WORK_CANCEL_EXPORTED) +- kallsyms_task_work_cancel = (void *)kallsyms_lookup_name("task_work_cancel"); +- if (kallsyms_task_work_cancel == NULL) { +- _stp_error("Can't resolve task_work_cancel!"); ++ kallsyms_task_work_cancel_fn = (void *)kallsyms_lookup_name(TOSTRING(TASK_WORK_CANCEL_FN)); ++ if (kallsyms_task_work_cancel_fn == NULL) { ++ _stp_error("Can't resolve %s!", TOSTRING(TASK_WORK_CANCEL_FN)); + return -ENOENT; + } + #endif +-- +2.33.0 + diff --git a/systemtap.spec b/systemtap.spec index c789226..570fee4 100644 --- a/systemtap.spec +++ b/systemtap.spec @@ -22,7 +22,7 @@ Name: systemtap Version: 5.0 -Release: 2 +Release: 3 Summary: Linux trace and probe tool License: GPLv2+ and Public Domain URL: http://sourceware.org/systemtap @@ -31,6 +31,7 @@ Source: https://sourceware.org/systemtap/ftp/releases/%{name}-%{version}.tar.gz Patch9000: huawei-fix-network-tcp-test-error.patch Patch9001: huawei-local-is-only-valid-in-functions-for-shellche-sc2168.patch Patch9002: Add-basic-LoongArch64-support.patch +Patch9003: Make-stp_task_work-compatible-with-6.11-kernels.patch BuildRequires: gcc-c++ emacs systemd python3-setuptools BuildRequires: gettext-devel rpm-devel readline-devel @@ -478,6 +479,12 @@ exit 0 %{_mandir}/man[1378]/* %changelog +* Wed Sep 04 2024 wangxiao - 5.0-3 +- Type:bugfix +- CVE:NA +- SUG:NA +- DESC:Make stp_task_work compatible with 6.11 kernels + * Fri Jul 05 2024 wangqiang - 5.0-2 - Type:update - CVE:NA -- Gitee