bpf: Refactor ARG_PTR_TO_DYNPTR checks into process_dynptr_func
authorKumar Kartikeya Dwivedi <memxor@gmail.com>
Wed, 7 Dec 2022 20:41:35 +0000 (02:11 +0530)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 9 Dec 2022 02:25:31 +0000 (18:25 -0800)
commit6b75bd3d036745b9be30917909f03602099adbdb
treeb737034debd7b3a86989ae5946eccaa21225aa19
parent6798152be4e7e03e156c3c4ba3c06b80ff2bbd99
bpf: Refactor ARG_PTR_TO_DYNPTR checks into process_dynptr_func

ARG_PTR_TO_DYNPTR is akin to ARG_PTR_TO_TIMER, ARG_PTR_TO_KPTR, where
the underlying register type is subjected to more special checks to
determine the type of object represented by the pointer and its state
consistency.

Move dynptr checks to their own 'process_dynptr_func' function so that
is consistent and in-line with existing code. This also makes it easier
to reuse this code for kfunc handling.

Then, reuse this consolidated function in kfunc dynptr handling too.
Note that for kfuncs, the arg_type constraint of DYNPTR_TYPE_LOCAL has
been lifted.

Acked-by: David Vernet <void@manifault.com>
Acked-by: Joanne Koong <joannelkoong@gmail.com>
Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Link: https://lore.kernel.org/r/20221207204141.308952-2-memxor@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
include/linux/bpf_verifier.h
kernel/bpf/verifier.c
tools/testing/selftests/bpf/prog_tests/kfunc_dynptr_param.c
tools/testing/selftests/bpf/progs/test_kfunc_dynptr_param.c