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"))
        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, (__u64)(long)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, (__u64)(long)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");
        ASSERT_EQ(skel->bss->a[7], 8, "arg8");
 #endif
 
-       free(mem);
+       fclose(devnull);
 cleanup:
        test_uprobe_autoattach__destroy(skel);
 }
 
 int uretprobe_byname_rc = 0;
 int uretprobe_byname_ret = 0;
 int uretprobe_byname_ran = 0;
-size_t uprobe_byname2_parm1 = 0;
+u64 uprobe_byname2_parm1 = 0;
 int uprobe_byname2_ran = 0;
-char *uretprobe_byname2_rc = NULL;
+u64 uretprobe_byname2_rc = 0;
 int uretprobe_byname2_ran = 0;
 
 int test_pid;
 }
 
 
-SEC("uprobe/libc.so.6:malloc")
-int handle_uprobe_byname2(struct pt_regs *ctx)
+SEC("uprobe/libc.so.6:fopen")
+int BPF_UPROBE(handle_uprobe_byname2, const char *pathname, const char *mode)
 {
        int pid = bpf_get_current_pid_tgid() >> 32;
 
        /* ignore irrelevant invocations */
        if (test_pid != pid)
                return 0;
-       uprobe_byname2_parm1 = PT_REGS_PARM1_CORE(ctx);
+       uprobe_byname2_parm1 = (u64)(long)pathname;
        uprobe_byname2_ran = 3;
        return 0;
 }
 
-SEC("uretprobe/libc.so.6:malloc")
-int handle_uretprobe_byname2(struct pt_regs *ctx)
+SEC("uretprobe/libc.so.6:fopen")
+int BPF_URETPROBE(handle_uretprobe_byname2, void *ret)
 {
        int pid = bpf_get_current_pid_tgid() >> 32;
 
        /* ignore irrelevant invocations */
        if (test_pid != pid)
                return 0;
-       uretprobe_byname2_rc = (char *)PT_REGS_RC_CORE(ctx);
+       uretprobe_byname2_rc = (u64)(long)ret;
        uretprobe_byname2_ran = 4;
        return 0;
 }