Re: [PATCH bpf-next] selftests/bpf: Make linked_list failure test more robust

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Oct 20, 2023 at 7:48 AM Kumar Kartikeya Dwivedi
<memxor@xxxxxxxxx> wrote:
>
> The linked list failure test 'pop_front_off' and 'pop_back_off'
> currently rely on matching exact instruction and register values.  The
> purpose of the test is to ensure the offset is correctly incremented for
> the returned pointers from list pop helpers, which can then be used with
> container_of to obtain the real object. Hence, somehow obtaining the
> information that the offset is 48 will work for us. Make the test more
> robust by relying on verifier error string of bpf_spin_lock and remove
> dependence on fragile instruction index or register number, which can be
> affected by different clang versions used to build the selftests.
>
> Fixes: 300f19dcdb99 ("selftests/bpf: Add BPF linked list API tests")
> Reported-by: Andrii Nakryiko <andrii@xxxxxxxxxx>
> Signed-off-by: Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx>
> ---
>  tools/testing/selftests/bpf/prog_tests/linked_list.c | 10 ++--------
>  tools/testing/selftests/bpf/progs/linked_list_fail.c |  4 +++-
>  2 files changed, 5 insertions(+), 9 deletions(-)
>

Thanks for the fix! Applied to bpf-next.

> diff --git a/tools/testing/selftests/bpf/prog_tests/linked_list.c b/tools/testing/selftests/bpf/prog_tests/linked_list.c
> index 69dc31383b78..2fb89de63bd2 100644
> --- a/tools/testing/selftests/bpf/prog_tests/linked_list.c
> +++ b/tools/testing/selftests/bpf/prog_tests/linked_list.c
> @@ -94,14 +94,8 @@ static struct {
>         { "incorrect_head_var_off2", "variable ptr_ access var_off=(0x0; 0xffffffff) disallowed" },
>         { "incorrect_head_off1", "bpf_list_head not found at offset=25" },
>         { "incorrect_head_off2", "bpf_list_head not found at offset=1" },
> -       { "pop_front_off",
> -         "15: (bf) r1 = r6                      ; R1_w=ptr_or_null_foo(id=4,ref_obj_id=4,off=48,imm=0) "
> -         "R6_w=ptr_or_null_foo(id=4,ref_obj_id=4,off=48,imm=0) refs=2,4\n"
> -         "16: (85) call bpf_this_cpu_ptr#154\nR1 type=ptr_or_null_ expected=percpu_ptr_" },
> -       { "pop_back_off",
> -         "15: (bf) r1 = r6                      ; R1_w=ptr_or_null_foo(id=4,ref_obj_id=4,off=48,imm=0) "
> -         "R6_w=ptr_or_null_foo(id=4,ref_obj_id=4,off=48,imm=0) refs=2,4\n"
> -         "16: (85) call bpf_this_cpu_ptr#154\nR1 type=ptr_or_null_ expected=percpu_ptr_" },
> +       { "pop_front_off", "off 48 doesn't point to 'struct bpf_spin_lock' that is at 40" },
> +       { "pop_back_off", "off 48 doesn't point to 'struct bpf_spin_lock' that is at 40" },
>  };
>
>  static void test_linked_list_fail_prog(const char *prog_name, const char *err_msg)
> diff --git a/tools/testing/selftests/bpf/progs/linked_list_fail.c b/tools/testing/selftests/bpf/progs/linked_list_fail.c
> index f4c63daba229..6438982b928b 100644
> --- a/tools/testing/selftests/bpf/progs/linked_list_fail.c
> +++ b/tools/testing/selftests/bpf/progs/linked_list_fail.c
> @@ -591,7 +591,9 @@ int pop_ptr_off(void *(*op)(void *head))
>         n = op(&p->head);
>         bpf_spin_unlock(&p->lock);
>
> -       bpf_this_cpu_ptr(n);
> +       if (!n)
> +               return 0;
> +       bpf_spin_lock((void *)n);
>         return 0;
>  }
>
> --
> 2.40.1
>





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux