Commit 907300c7 authored by Ilya Leoshkevich's avatar Ilya Leoshkevich Committed by Andrii Nakryiko

selftests/bpf: Attach to fopen()/fclose() in uprobe_autoattach

malloc() and free() may be completely replaced by sanitizers, use
fopen() and fclose() instead.
Signed-off-by: default avatarIlya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20230210001210.395194-6-iii@linux.ibm.com
parent 24a87b47
...@@ -16,10 +16,10 @@ static noinline int autoattach_trigger_func(int arg1, int arg2, int arg3, ...@@ -16,10 +16,10 @@ static noinline int autoattach_trigger_func(int arg1, int arg2, int arg3,
void test_uprobe_autoattach(void) void test_uprobe_autoattach(void)
{ {
const char *devnull_str = "/dev/null";
struct test_uprobe_autoattach *skel; struct test_uprobe_autoattach *skel;
int trigger_ret; int trigger_ret;
size_t malloc_sz = 1; FILE *devnull;
char *mem;
skel = test_uprobe_autoattach__open_and_load(); skel = test_uprobe_autoattach__open_and_load();
if (!ASSERT_OK_PTR(skel, "skel_open")) if (!ASSERT_OK_PTR(skel, "skel_open"))
...@@ -36,16 +36,18 @@ void test_uprobe_autoattach(void) ...@@ -36,16 +36,18 @@ void test_uprobe_autoattach(void)
skel->bss->test_pid = getpid(); skel->bss->test_pid = getpid();
/* trigger & validate shared library u[ret]probes attached by name */ /* trigger & validate shared library u[ret]probes attached by name */
mem = malloc(malloc_sz); devnull = fopen(devnull_str, "r");
ASSERT_EQ(skel->bss->uprobe_byname_parm1, 1, "check_uprobe_byname_parm1"); ASSERT_EQ(skel->bss->uprobe_byname_parm1, 1, "check_uprobe_byname_parm1");
ASSERT_EQ(skel->bss->uprobe_byname_ran, 1, "check_uprobe_byname_ran"); ASSERT_EQ(skel->bss->uprobe_byname_ran, 1, "check_uprobe_byname_ran");
ASSERT_EQ(skel->bss->uretprobe_byname_rc, trigger_ret, "check_uretprobe_byname_rc"); ASSERT_EQ(skel->bss->uretprobe_byname_rc, trigger_ret, "check_uretprobe_byname_rc");
ASSERT_EQ(skel->bss->uretprobe_byname_ret, trigger_ret, "check_uretprobe_byname_ret"); ASSERT_EQ(skel->bss->uretprobe_byname_ret, trigger_ret, "check_uretprobe_byname_ret");
ASSERT_EQ(skel->bss->uretprobe_byname_ran, 2, "check_uretprobe_byname_ran"); ASSERT_EQ(skel->bss->uretprobe_byname_ran, 2, "check_uretprobe_byname_ran");
ASSERT_EQ(skel->bss->uprobe_byname2_parm1, malloc_sz, "check_uprobe_byname2_parm1"); ASSERT_EQ(skel->bss->uprobe_byname2_parm1, (__u64)(long)devnull_str,
"check_uprobe_byname2_parm1");
ASSERT_EQ(skel->bss->uprobe_byname2_ran, 3, "check_uprobe_byname2_ran"); ASSERT_EQ(skel->bss->uprobe_byname2_ran, 3, "check_uprobe_byname2_ran");
ASSERT_EQ(skel->bss->uretprobe_byname2_rc, mem, "check_uretprobe_byname2_rc"); ASSERT_EQ(skel->bss->uretprobe_byname2_rc, (__u64)(long)devnull,
"check_uretprobe_byname2_rc");
ASSERT_EQ(skel->bss->uretprobe_byname2_ran, 4, "check_uretprobe_byname2_ran"); ASSERT_EQ(skel->bss->uretprobe_byname2_ran, 4, "check_uretprobe_byname2_ran");
ASSERT_EQ(skel->bss->a[0], 1, "arg1"); ASSERT_EQ(skel->bss->a[0], 1, "arg1");
...@@ -67,7 +69,7 @@ void test_uprobe_autoattach(void) ...@@ -67,7 +69,7 @@ void test_uprobe_autoattach(void)
ASSERT_EQ(skel->bss->a[7], 8, "arg8"); ASSERT_EQ(skel->bss->a[7], 8, "arg8");
#endif #endif
free(mem); fclose(devnull);
cleanup: cleanup:
test_uprobe_autoattach__destroy(skel); test_uprobe_autoattach__destroy(skel);
} }
...@@ -13,9 +13,9 @@ int uprobe_byname_ran = 0; ...@@ -13,9 +13,9 @@ int uprobe_byname_ran = 0;
int uretprobe_byname_rc = 0; int uretprobe_byname_rc = 0;
int uretprobe_byname_ret = 0; int uretprobe_byname_ret = 0;
int uretprobe_byname_ran = 0; int uretprobe_byname_ran = 0;
size_t uprobe_byname2_parm1 = 0; u64 uprobe_byname2_parm1 = 0;
int uprobe_byname2_ran = 0; int uprobe_byname2_ran = 0;
char *uretprobe_byname2_rc = NULL; u64 uretprobe_byname2_rc = 0;
int uretprobe_byname2_ran = 0; int uretprobe_byname2_ran = 0;
int test_pid; int test_pid;
...@@ -88,28 +88,28 @@ int BPF_URETPROBE(handle_uretprobe_byname, int ret) ...@@ -88,28 +88,28 @@ int BPF_URETPROBE(handle_uretprobe_byname, int ret)
} }
SEC("uprobe/libc.so.6:malloc") SEC("uprobe/libc.so.6:fopen")
int handle_uprobe_byname2(struct pt_regs *ctx) int BPF_UPROBE(handle_uprobe_byname2, const char *pathname, const char *mode)
{ {
int pid = bpf_get_current_pid_tgid() >> 32; int pid = bpf_get_current_pid_tgid() >> 32;
/* ignore irrelevant invocations */ /* ignore irrelevant invocations */
if (test_pid != pid) if (test_pid != pid)
return 0; return 0;
uprobe_byname2_parm1 = PT_REGS_PARM1_CORE(ctx); uprobe_byname2_parm1 = (u64)(long)pathname;
uprobe_byname2_ran = 3; uprobe_byname2_ran = 3;
return 0; return 0;
} }
SEC("uretprobe/libc.so.6:malloc") SEC("uretprobe/libc.so.6:fopen")
int handle_uretprobe_byname2(struct pt_regs *ctx) int BPF_URETPROBE(handle_uretprobe_byname2, void *ret)
{ {
int pid = bpf_get_current_pid_tgid() >> 32; int pid = bpf_get_current_pid_tgid() >> 32;
/* ignore irrelevant invocations */ /* ignore irrelevant invocations */
if (test_pid != pid) if (test_pid != pid)
return 0; return 0;
uretprobe_byname2_rc = (char *)PT_REGS_RC_CORE(ctx); uretprobe_byname2_rc = (u64)(long)ret;
uretprobe_byname2_ran = 4; uretprobe_byname2_ran = 4;
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment