lkml.org 
[lkml]   [2020]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.8 172/633] selftests/bpf: Fix test_vmlinux test to use bpf_probe_read_user()
    Date
    From: Andrii Nakryiko <andriin@fb.com>

    [ Upstream commit 02f47faa25db134f6043fb6b12a68b5d4c980bb6 ]

    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: acbd06206bbb ("selftests/bpf: Add vmlinux.h selftest exercising tracing of syscalls")
    Signed-off-by: Andrii Nakryiko <andriin@fb.com>
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20200818213356.2629020-6-andriin@fb.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    tools/testing/selftests/bpf/progs/test_vmlinux.c | 12 +++++++++---
    1 file changed, 9 insertions(+), 3 deletions(-)

    diff --git a/tools/testing/selftests/bpf/progs/test_vmlinux.c b/tools/testing/selftests/bpf/progs/test_vmlinux.c
    index 5611b564d3b1c..f54b2293c490f 100644
    --- a/tools/testing/selftests/bpf/progs/test_vmlinux.c
    +++ b/tools/testing/selftests/bpf/progs/test_vmlinux.c
    @@ -19,12 +19,14 @@ SEC("tp/syscalls/sys_enter_nanosleep")
    int handle__tp(struct trace_event_raw_sys_enter *args)
    {
    struct __kernel_timespec *ts;
    + long tv_nsec;

    if (args->id != __NR_nanosleep)
    return 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;

    tp_called = true;
    @@ -35,12 +37,14 @@ SEC("raw_tp/sys_enter")
    int BPF_PROG(handle__raw_tp, struct pt_regs *regs, long id)
    {
    struct __kernel_timespec *ts;
    + long tv_nsec;

    if (id != __NR_nanosleep)
    return 0;

    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;

    raw_tp_called = true;
    @@ -51,12 +55,14 @@ SEC("tp_btf/sys_enter")
    int BPF_PROG(handle__tp_btf, struct pt_regs *regs, long id)
    {
    struct __kernel_timespec *ts;
    + long tv_nsec;

    if (id != __NR_nanosleep)
    return 0;

    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;

    tp_btf_called = true;
    --
    2.25.1


    \
     
     \ /
      Last update: 2020-10-27 18:09    [W:3.885 / U:0.556 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site