• David Vernet's avatar
    selftests/bpf: Add testcases for ptr_*_or_null_ in bpf_kptr_xchg · 67efbd57
    David Vernet authored
    The second argument of the bpf_kptr_xchg() helper function is
    ARG_PTR_TO_BTF_ID_OR_NULL. A recent patch fixed a bug whereby the
    verifier would fail with an internal error message if a program invoked
    the helper with a PTR_TO_BTF_ID | PTR_MAYBE_NULL register. This testcase
    adds some testcases to ensure that it fails gracefully moving forward.
    
    Before the fix, these testcases would have failed an error resembling
    the following:
    
    ; p = bpf_kfunc_call_test_acquire(&(unsigned long){0});
    99: (7b) *(u64 *)(r10 -16) = r7       ; frame1: ...
    100: (bf) r1 = r10                    ; frame1: ...
    101: (07) r1 += -16                   ; frame1: ...
    ; p = bpf_kfunc_call_test_acquire(&(unsigned long){0});
    102: (85) call bpf_kfunc_call_test_acquire#13908
    ; frame1: R0_w=ptr_or_null_prog_test_ref_kfunc...
    ; p = bpf_kptr_xchg(&v->ref_ptr, p);
    103: (bf) r1 = r6                     ; frame1: ...
    104: (bf) r2 = r0
    ; frame1: R0_w=ptr_or_null_prog_test_ref_kfunc...
    105: (85) call bpf_kptr_xchg#194
    verifier internal error: invalid PTR_TO_BTF_ID register for type match
    Signed-off-by: default avatarDavid Vernet <void@manifault.com>
    Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20230330145203.80506-2-void@manifault.com
    67efbd57
map_kptr_fail.c 9.31 KB