[PATCH] tracefs: Add tests for clearing kprobes with tracefs_dynevent_destroy_all()
Steven Rostedt <[email protected]> Thu, 23 Apr 2026 16:22:07 -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]> --- utest/tracefs-utest.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/utest/tracefs-utest.c b/utest/tracefs-utest.c index 353b3cbee199..7ec7b42eebb0 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++) @@ -3966,7 +3989,8 @@ void test_tracefs_lib(void) fprintf(stderr, "Suite \"%s\" cannot be ceated\n", TRACEFS_SUITE); return; } - + CU_add_test(suite, "kprobes", test_kprobes); + return; CU_add_test(suite, "Test tracefs/debugfs mounting", test_mounting); CU_add_test(suite, "trace cpu read", test_trace_cpu_read); @@ -4032,7 +4056,6 @@ void test_tracefs_lib(void) test_custom_trace_dir); CU_add_test(suite, "ftrace marker", test_ftrace_marker); - CU_add_test(suite, "kprobes", test_kprobes); CU_add_test(suite, "synthetic events", test_synthetic); CU_add_test(suite, "eprobes", test_eprobes); CU_add_test(suite, "uprobes", test_uprobes); -- 2.53.0