Commit 02f47faa authored by Andrii Nakryiko's avatar Andrii Nakryiko Committed by Alexei Starovoitov

selftests/bpf: Fix test_vmlinux test to use bpf_probe_read_user()

The test is reading UAPI kernel structure from user-space. So it doesn't need
CO-RE relocations and has to use bpf_probe_read_user().

Fixes: acbd0620 ("selftests/bpf: Add vmlinux.h selftest exercising tracing of syscalls")
Signed-off-by: default avatarAndrii Nakryiko <andriin@fb.com>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200818213356.2629020-6-andriin@fb.com
parent 109cea5a
...@@ -19,12 +19,14 @@ SEC("tp/syscalls/sys_enter_nanosleep") ...@@ -19,12 +19,14 @@ SEC("tp/syscalls/sys_enter_nanosleep")
int handle__tp(struct trace_event_raw_sys_enter *args) int handle__tp(struct trace_event_raw_sys_enter *args)
{ {
struct __kernel_timespec *ts; struct __kernel_timespec *ts;
long tv_nsec;
if (args->id != __NR_nanosleep) if (args->id != __NR_nanosleep)
return 0; return 0;
ts = (void *)args->args[0]; ts = (void *)args->args[0];
if (BPF_CORE_READ(ts, tv_nsec) != MY_TV_NSEC) if (bpf_probe_read_user(&tv_nsec, sizeof(ts->tv_nsec), &ts->tv_nsec) ||
tv_nsec != MY_TV_NSEC)
return 0; return 0;
tp_called = true; tp_called = true;
...@@ -35,12 +37,14 @@ SEC("raw_tp/sys_enter") ...@@ -35,12 +37,14 @@ SEC("raw_tp/sys_enter")
int BPF_PROG(handle__raw_tp, struct pt_regs *regs, long id) int BPF_PROG(handle__raw_tp, struct pt_regs *regs, long id)
{ {
struct __kernel_timespec *ts; struct __kernel_timespec *ts;
long tv_nsec;
if (id != __NR_nanosleep) if (id != __NR_nanosleep)
return 0; return 0;
ts = (void *)PT_REGS_PARM1_CORE(regs); ts = (void *)PT_REGS_PARM1_CORE(regs);
if (BPF_CORE_READ(ts, tv_nsec) != MY_TV_NSEC) if (bpf_probe_read_user(&tv_nsec, sizeof(ts->tv_nsec), &ts->tv_nsec) ||
tv_nsec != MY_TV_NSEC)
return 0; return 0;
raw_tp_called = true; raw_tp_called = true;
...@@ -51,12 +55,14 @@ SEC("tp_btf/sys_enter") ...@@ -51,12 +55,14 @@ SEC("tp_btf/sys_enter")
int BPF_PROG(handle__tp_btf, struct pt_regs *regs, long id) int BPF_PROG(handle__tp_btf, struct pt_regs *regs, long id)
{ {
struct __kernel_timespec *ts; struct __kernel_timespec *ts;
long tv_nsec;
if (id != __NR_nanosleep) if (id != __NR_nanosleep)
return 0; return 0;
ts = (void *)PT_REGS_PARM1_CORE(regs); ts = (void *)PT_REGS_PARM1_CORE(regs);
if (BPF_CORE_READ(ts, tv_nsec) != MY_TV_NSEC) if (bpf_probe_read_user(&tv_nsec, sizeof(ts->tv_nsec), &ts->tv_nsec) ||
tv_nsec != MY_TV_NSEC)
return 0; return 0;
tp_btf_called = true; tp_btf_called = true;
......
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