[PATCH v2] tracefs: Add tests for clearing kprobes with tracefs_dynevent_destroy_all()
Steven Rostedt <[email protected]> Fri, 24 Apr 2026 14:48:39 -0400
| Newsgroups | org.kernel.vger.linux-trace-devel |
|---|---|
| Message-ID | <[email protected]> |
From: Steven Rostedt <[email protected]> There was a regression with the use of tracefs_dynevent_destroy_all() where it wasn't resetting kprobe events. Add testing of that function in the utest for kprobe events. Link: https://bugzilla.kernel.org/show_bug.cgi?id=221395 Signed-off-by: Steven Rostedt <[email protected]> --- Changes since v1: https://lore.kernel.org/[email protected] - Remove leftover debugging (had kprobe test first followed by a return). (Metin Kaya) utest/tracefs-utest.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/utest/tracefs-utest.c b/utest/tracefs-utest.c index 97a91dfcdb2c..e3ff2151796b 100644 --- a/utest/tracefs-utest.c +++ b/utest/tracefs-utest.c @@ -2330,6 +2330,7 @@ static void test_kprobes_instance(struct tracefs_instance *instance) /* kprobes APIs */ destroy_dynevents(TRACEFS_DYNEVENT_KPROBE | TRACEFS_DYNEVENT_KRETPROBE); + /* Allocate first */ for (i = 0; i < kprobe_count; i++) { dkprobe[i] = tracefs_kprobe_alloc(ktests[i].system, ktests[i].event, ktests[i].address, ktests[i].format); @@ -2348,6 +2349,7 @@ static void test_kprobes_instance(struct tracefs_instance *instance) get_dynevents_check(TRACEFS_DYNEVENT_KPROBE | TRACEFS_DYNEVENT_KRETPROBE, 0); CU_TEST(check_probes(kretests, kretprobe_count, dkretprobe, false, instance, tep)); + /* Create the kprobes */ for (i = 0; i < kprobe_count; i++) { CU_TEST(tracefs_dynevent_create(dkprobe[i]) == 0); } @@ -2387,6 +2389,27 @@ static void test_kprobes_instance(struct tracefs_instance *instance) tracefs_dynevent_list_free(devents); devents = NULL; + /* Recreate both types, and destroy with tracefs_dynevent_destroy_all() */ + for (i = 0; i < kretprobe_count; i++) { + CU_TEST(tracefs_dynevent_create(dkretprobe[i]) == 0); + } + for (i = 0; i < kprobe_count; i++) { + CU_TEST(tracefs_dynevent_create(dkprobe[i]) == 0); + } + devents = get_dynevents_check(TRACEFS_DYNEVENT_KPROBE | TRACEFS_DYNEVENT_KRETPROBE, + kprobe_count + kretprobe_count); + CU_TEST(check_probes(ktests, kprobe_count, devents, true, instance, tep)); + CU_TEST(check_probes(kretests, kretprobe_count, dkretprobe, true, instance, tep)); + tracefs_dynevent_list_free(devents); + devents = NULL; + + CU_TEST(tracefs_dynevent_destroy_all(TRACEFS_DYNEVENT_ALL, true) == 0); + + get_dynevents_check(TRACEFS_DYNEVENT_KPROBE | TRACEFS_DYNEVENT_KRETPROBE, 0); + CU_TEST(check_probes(ktests, kprobe_count, dkprobe, false, instance, tep)); + CU_TEST(check_probes(kretests, kretprobe_count, dkretprobe, false, instance, tep)) + + /* Free the dynamic events */ for (i = 0; i < kprobe_count; i++) tracefs_dynevent_free(dkprobe[i]); for (i = 0; i < kretprobe_count; i++) -- 2.53.0