On Thu Nov 5, 2020 at 1:32 PM PST, Andrii Nakryiko wrote: > On Wed, Nov 4, 2020 at 8:51 PM Daniel Xu <dxu@xxxxxxxxx> wrote: [...] > > diff --git a/tools/testing/selftests/bpf/progs/test_probe_read_user_str.c b/tools/testing/selftests/bpf/progs/test_probe_read_user_str.c > > new file mode 100644 > > index 000000000000..41c3e296566e > > --- /dev/null > > +++ b/tools/testing/selftests/bpf/progs/test_probe_read_user_str.c > > @@ -0,0 +1,34 @@ > > +// SPDX-License-Identifier: GPL-2.0 > > + > > +#include <linux/bpf.h> > > +#include <bpf/bpf_helpers.h> > > +#include <bpf/bpf_tracing.h> > > + > > +#include <sys/types.h> > > + > > +struct sys_enter_write_args { > > + unsigned long long pad; > > + int syscall_nr; > > + int pad1; /* 4 byte hole */ > > I have a hunch that this explicit padding might break on big-endian > architectures?.. > > Can you instead include "vmlinux.h" in this file and use struct > trace_event_raw_sys_enter? you'll just need ctx->args[2] to get that > buffer pointer. > > Alternatively, and it's probably simpler overall would be to just > provide user-space pointer through global variable: > > void *user_ptr; > > > bpf_probe_read_user_str(buf, ..., user_ptr); > > From user-space: > > skel->bss->user_ptr = &my_userspace_buf; > > Full control. You can trigger tracepoint with just an usleep(1), for > instance. Yeah, that sounds better. I'll send a v4 with passing a ptr. Thanks, Daniel [...]