On Sun, Feb 02, 2025 at 08:29:21AM -0800, Eyal Birger wrote: SNIP > +TEST_F(URETPROBE, uretprobe_default_block) > +{ > + struct sock_filter filter[] = { > + BPF_STMT(BPF_LD|BPF_W|BPF_ABS, > + offsetof(struct seccomp_data, nr)), > + BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, __NR_exit_group, 1, 0), > + BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_KILL), > + BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_ALLOW), > + }; > + struct sock_fprog prog = { > + .len = (unsigned short)ARRAY_SIZE(filter), > + .filter = filter, > + }; > + > + ASSERT_EQ(0, run_probed_with_filter(&prog)); > +} > + > +TEST_F(URETPROBE, uretprobe_block_uretprobe_syscall) > +{ > + struct sock_filter filter[] = { > + BPF_STMT(BPF_LD|BPF_W|BPF_ABS, > + offsetof(struct seccomp_data, nr)), > +#ifdef __NR_uretprobe > + BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, __NR_uretprobe, 0, 1), > +#endif does it make sense to run these tests on archs without __NR_uretprobe ? jirka > + BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_KILL), > + BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_ALLOW), > + }; > + struct sock_fprog prog = { > + .len = (unsigned short)ARRAY_SIZE(filter), > + .filter = filter, > + }; > + > + ASSERT_EQ(0, run_probed_with_filter(&prog)); > +} > + > +TEST_F(URETPROBE, uretprobe_default_block_with_uretprobe_syscall) > +{ > + struct sock_filter filter[] = { > + BPF_STMT(BPF_LD|BPF_W|BPF_ABS, > + offsetof(struct seccomp_data, nr)), > +#ifdef __NR_uretprobe > + BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, __NR_uretprobe, 2, 0), > +#endif > + BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, __NR_exit_group, 1, 0), > + BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_KILL), > + BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_ALLOW), > + }; > + struct sock_fprog prog = { > + .len = (unsigned short)ARRAY_SIZE(filter), > + .filter = filter, > + }; > + > + ASSERT_EQ(0, run_probed_with_filter(&prog)); > +} > + > /* > * TODO: > * - expand NNP testing > -- > 2.43.0 >