Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

selftests/bpf: Change test_uretprobe_regs_change for uprobe and uretprobe

Changing the test_uretprobe_regs_change test to test both uprobe
and uretprobe by adding entry consumer handler to the testmod
and making it to change one of the registers.

Making sure that changed values both uprobe and uretprobe handlers
propagate to the user space.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/r/20250720112133.244369-20-jolsa@kernel.org

authored by

Jiri Olsa and committed by
Peter Zijlstra
3abf4298 275eae67

+17 -6
+8 -4
tools/testing/selftests/bpf/prog_tests/uprobe_syscall.c
··· 207 207 return ret != n ? (int) ret : 0; 208 208 } 209 209 210 - static void test_uretprobe_regs_change(void) 210 + static void test_regs_change(void) 211 211 { 212 212 struct pt_regs before = {}, after = {}; 213 213 unsigned long *pb = (unsigned long *) &before; ··· 220 220 err = write_bpf_testmod_uprobe(offset); 221 221 if (!ASSERT_OK(err, "register_uprobe")) 222 222 return; 223 + 224 + /* make sure uprobe gets optimized */ 225 + uprobe_regs_trigger(); 223 226 224 227 uprobe_regs(&before, &after); 225 228 ··· 646 643 647 644 test_uprobe_regs_equal(false); 648 645 test_uprobe_regs_equal(true); 649 - test_uretprobe_regs_change(); 650 646 test_uretprobe_syscall_call(); 651 647 652 648 test_uprobe_legacy(); 653 649 test_uprobe_multi(); 654 650 test_uprobe_session(); 655 651 test_uprobe_usdt(); 652 + 653 + test_regs_change(); 656 654 657 655 shstk_is_enabled = false; 658 656 ··· 803 799 { 804 800 if (test__start_subtest("uretprobe_regs_equal")) 805 801 test_uprobe_regs_equal(true); 806 - if (test__start_subtest("uretprobe_regs_change")) 807 - test_uretprobe_regs_change(); 808 802 if (test__start_subtest("uretprobe_syscall_call")) 809 803 test_uretprobe_syscall_call(); 810 804 if (test__start_subtest("uretprobe_shadow_stack")) ··· 821 819 test_uprobe_sigill(); 822 820 if (test__start_subtest("uprobe_regs_equal")) 823 821 test_uprobe_regs_equal(false); 822 + if (test__start_subtest("regs_change")) 823 + test_regs_change(); 824 824 } 825 825 #else 826 826 static void __test_uprobe_syscall(void)
+9 -2
tools/testing/selftests/bpf/test_kmods/bpf_testmod.c
··· 501 501 #ifdef __x86_64__ 502 502 503 503 static int 504 + uprobe_handler(struct uprobe_consumer *self, struct pt_regs *regs, __u64 *data) 505 + { 506 + regs->cx = 0x87654321feebdaed; 507 + return 0; 508 + } 509 + 510 + static int 504 511 uprobe_ret_handler(struct uprobe_consumer *self, unsigned long func, 505 512 struct pt_regs *regs, __u64 *data) 506 513 507 514 { 508 515 regs->ax = 0x12345678deadbeef; 509 - regs->cx = 0x87654321feebdaed; 510 516 regs->r11 = (u64) -1; 511 - return true; 517 + return 0; 512 518 } 513 519 514 520 struct testmod_uprobe { ··· 526 520 static DEFINE_MUTEX(testmod_uprobe_mutex); 527 521 528 522 static struct testmod_uprobe uprobe = { 523 + .consumer.handler = uprobe_handler, 529 524 .consumer.ret_handler = uprobe_ret_handler, 530 525 }; 531 526