On Wed, Feb 8, 2023 at 12:57 PM Ilya Leoshkevich <iii@xxxxxxxxxxxxx> wrote: > > malloc() and free() may be completely replaced by sanitizers, use > fopen() and fclose() instead. > > Signed-off-by: Ilya Leoshkevich <iii@xxxxxxxxxxxxx> > --- > .../selftests/bpf/prog_tests/uprobe_autoattach.c | 12 ++++++------ > .../selftests/bpf/progs/test_uprobe_autoattach.c | 10 +++++----- > 2 files changed, 11 insertions(+), 11 deletions(-) > > diff --git a/tools/testing/selftests/bpf/prog_tests/uprobe_autoattach.c b/tools/testing/selftests/bpf/prog_tests/uprobe_autoattach.c > index 82807def0d24..b862948f95a8 100644 > --- a/tools/testing/selftests/bpf/prog_tests/uprobe_autoattach.c > +++ b/tools/testing/selftests/bpf/prog_tests/uprobe_autoattach.c > @@ -16,10 +16,10 @@ static noinline int autoattach_trigger_func(int arg1, int arg2, int arg3, > > void test_uprobe_autoattach(void) > { > + const char *devnull_str = "/dev/null"; > struct test_uprobe_autoattach *skel; > int trigger_ret; > - size_t malloc_sz = 1; > - char *mem; > + FILE *devnull; > > skel = test_uprobe_autoattach__open_and_load(); > if (!ASSERT_OK_PTR(skel, "skel_open")) > @@ -36,16 +36,16 @@ void test_uprobe_autoattach(void) > skel->bss->test_pid = getpid(); > > /* 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_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_ret, trigger_ret, "check_uretprobe_byname_ret"); > 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, devnull_str, "check_uprobe_byname2_parm1"); > 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, (void *)devnull, "check_uretprobe_byname2_rc"); > ASSERT_EQ(skel->bss->uretprobe_byname2_ran, 4, "check_uretprobe_byname2_ran"); > > ASSERT_EQ(skel->bss->a[0], 1, "arg1"); > @@ -67,7 +67,7 @@ void test_uprobe_autoattach(void) > ASSERT_EQ(skel->bss->a[7], 8, "arg8"); > #endif > > - free(mem); > + fclose(devnull); > cleanup: > test_uprobe_autoattach__destroy(skel); > } > diff --git a/tools/testing/selftests/bpf/progs/test_uprobe_autoattach.c b/tools/testing/selftests/bpf/progs/test_uprobe_autoattach.c > index 774ddeb45898..72f5e7a82c58 100644 > --- a/tools/testing/selftests/bpf/progs/test_uprobe_autoattach.c > +++ b/tools/testing/selftests/bpf/progs/test_uprobe_autoattach.c > @@ -13,9 +13,9 @@ int uprobe_byname_ran = 0; > int uretprobe_byname_rc = 0; > int uretprobe_byname_ret = 0; > int uretprobe_byname_ran = 0; > -size_t uprobe_byname2_parm1 = 0; > +void *uprobe_byname2_parm1 = NULL; > int uprobe_byname2_ran = 0; > -char *uretprobe_byname2_rc = NULL; > +void *uretprobe_byname2_rc = NULL; ugh... shall we use u64 and avoid problems with 32-bit host vs 64-bit BPF mismatch? Maybe it will never bite us, but why risking? > int uretprobe_byname2_ran = 0; > > int test_pid; > @@ -88,7 +88,7 @@ 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 pid = bpf_get_current_pid_tgid() >> 32; > @@ -96,12 +96,12 @@ int handle_uprobe_byname2(struct pt_regs *ctx) > /* ignore irrelevant invocations */ > if (test_pid != pid) > return 0; > - uprobe_byname2_parm1 = PT_REGS_PARM1_CORE(ctx); > + uprobe_byname2_parm1 = (void *)(long)PT_REGS_PARM1_CORE(ctx); > uprobe_byname2_ran = 3; > return 0; > } > > -SEC("uretprobe/libc.so.6:malloc") > +SEC("uretprobe/libc.so.6:fopen") > int handle_uretprobe_byname2(struct pt_regs *ctx) > { > int pid = bpf_get_current_pid_tgid() >> 32; > -- > 2.39.1 >