From: Yonghong Song <yhs@fb.com>
To: Benjamin Tissoires <benjamin.tissoires@redhat.com>,
Greg KH <gregkh@linuxfoundation.org>,
Jiri Kosina <jikos@kernel.org>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Andrii Nakryiko <andrii@kernel.org>,
Martin KaFai Lau <kafai@fb.com>, Song Liu <songliubraving@fb.com>,
John Fastabend <john.fastabend@gmail.com>,
KP Singh <kpsingh@kernel.org>, Shuah Khan <shuah@kernel.org>,
Dave Marchevsky <davemarchevsky@fb.com>,
Joe Stringer <joe@cilium.io>, Jonathan Corbet <corbet@lwn.net>
Cc: Tero Kristo <tero.kristo@linux.intel.com>,
linux-kernel@vger.kernel.org, linux-input@vger.kernel.org,
netdev@vger.kernel.org, bpf@vger.kernel.org,
linux-kselftest@vger.kernel.org, linux-doc@vger.kernel.org
Subject: Re: [PATCH bpf-next v6 06/23] selftests/bpf: Add tests for kfunc returning a memory pointer
Date: Fri, 15 Jul 2022 21:33:32 -0700 [thread overview]
Message-ID: <bf56b01d-4c05-0d0b-e85b-219e55606803@fb.com> (raw)
In-Reply-To: <20220712145850.599666-7-benjamin.tissoires@redhat.com>
On 7/12/22 7:58 AM, Benjamin Tissoires wrote:
> We add 2 new kfuncs that are following the RET_PTR_TO_MEM
> capability from the previous commit.
> Then we test them in selftests:
> the first tests are testing valid case, and are not failing,
> and the later ones are actually preventing the program to be loaded
> because they are wrong.
>
> To work around that, we mark the failing ones as not autoloaded
> (with SEC("?tc")), and we manually enable them one by one, ensuring
> the verifier rejects them.
>
> To be able to use bpf_program__set_autoload() from libbpf, we need
> to use a plain skeleton, not a light-skeleton, and this is why we
> also change the Makefile to generate both for kfunc_call_test.c
>
> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
>
> ---
>
> new in v6
> ---
> include/linux/btf.h | 4 +-
> net/bpf/test_run.c | 22 +++++
> tools/testing/selftests/bpf/Makefile | 5 +-
> .../selftests/bpf/prog_tests/kfunc_call.c | 48 ++++++++++
> .../selftests/bpf/progs/kfunc_call_test.c | 89 +++++++++++++++++++
> 5 files changed, 165 insertions(+), 3 deletions(-)
>
> diff --git a/include/linux/btf.h b/include/linux/btf.h
> index 31da4273c2ec..6f46ff2128ae 100644
> --- a/include/linux/btf.h
> +++ b/include/linux/btf.h
> @@ -422,7 +422,9 @@ static inline int register_btf_id_dtor_kfuncs(const struct btf_id_dtor_kfunc *dt
>
> static inline bool btf_type_is_struct_ptr(struct btf *btf, const struct btf_type *t)
> {
> - /* t comes in already as a pointer */
> + if (!btf_type_is_ptr(t))
> + return false;
Why we have a change here?
> +
> t = btf_type_by_id(btf, t->type);
>
> /* allow const */
> diff --git a/net/bpf/test_run.c b/net/bpf/test_run.c
> index 9da2a42811e8..0b4026ea4652 100644
> --- a/net/bpf/test_run.c
> +++ b/net/bpf/test_run.c
> @@ -606,6 +606,24 @@ noinline void bpf_kfunc_call_memb1_release(struct prog_test_member1 *p)
> WARN_ON_ONCE(1);
> }
>
> +static int *__bpf_kfunc_call_test_get_mem(struct prog_test_ref_kfunc *p, const int size)
> +{
> + if (size > 2 * sizeof(int))
> + return NULL;
> +
> + return (int *)p;
> +}
> +
> +noinline int *bpf_kfunc_call_test_get_rdwr_mem(struct prog_test_ref_kfunc *p, const int rdwr_buf_size)
> +{
> + return __bpf_kfunc_call_test_get_mem(p, rdwr_buf_size);
> +}
> +
> +noinline int *bpf_kfunc_call_test_get_rdonly_mem(struct prog_test_ref_kfunc *p, const int rdonly_buf_size)
> +{
> + return __bpf_kfunc_call_test_get_mem(p, rdonly_buf_size);
> +}
> +
> noinline struct prog_test_ref_kfunc *
> bpf_kfunc_call_test_kptr_get(struct prog_test_ref_kfunc **pp, int a, int b)
> {
> @@ -704,6 +722,8 @@ BTF_ID(func, bpf_kfunc_call_memb_acquire)
> BTF_ID(func, bpf_kfunc_call_test_release)
> BTF_ID(func, bpf_kfunc_call_memb_release)
> BTF_ID(func, bpf_kfunc_call_memb1_release)
> +BTF_ID(func, bpf_kfunc_call_test_get_rdwr_mem)
> +BTF_ID(func, bpf_kfunc_call_test_get_rdonly_mem)
> BTF_ID(func, bpf_kfunc_call_test_kptr_get)
> BTF_ID(func, bpf_kfunc_call_test_pass_ctx)
> BTF_ID(func, bpf_kfunc_call_test_pass1)
> @@ -731,6 +751,8 @@ BTF_SET_END(test_sk_release_kfunc_ids)
> BTF_SET_START(test_sk_ret_null_kfunc_ids)
> BTF_ID(func, bpf_kfunc_call_test_acquire)
> BTF_ID(func, bpf_kfunc_call_memb_acquire)
> +BTF_ID(func, bpf_kfunc_call_test_get_rdwr_mem)
> +BTF_ID(func, bpf_kfunc_call_test_get_rdonly_mem)
> BTF_ID(func, bpf_kfunc_call_test_kptr_get)
> BTF_SET_END(test_sk_ret_null_kfunc_ids)
>
[...]
next prev parent reply other threads:[~2022-07-16 4:34 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-12 14:58 [PATCH bpf-next v6 00/23] Introduce eBPF support for HID devices Benjamin Tissoires
2022-07-12 14:58 ` [PATCH bpf-next v6 01/23] selftests/bpf: fix config for CLS_BPF Benjamin Tissoires
2022-07-15 23:55 ` Yonghong Song
2022-07-12 14:58 ` [PATCH bpf-next v6 02/23] bpf/verifier: allow kfunc to read user provided context Benjamin Tissoires
2022-07-15 23:56 ` Yonghong Song
2022-07-16 19:47 ` Kumar Kartikeya Dwivedi
2022-07-18 13:53 ` Benjamin Tissoires
2022-07-12 14:58 ` [PATCH bpf-next v6 03/23] bpf/verifier: do not clear meta in check_mem_size Benjamin Tissoires
2022-07-16 0:03 ` Yonghong Song
2022-07-12 14:58 ` [PATCH bpf-next v6 04/23] selftests/bpf: add test for accessing ctx from syscall program type Benjamin Tissoires
2022-07-16 0:17 ` Yonghong Song
2022-07-12 14:58 ` [PATCH bpf-next v6 05/23] bpf/verifier: allow kfunc to return an allocated mem Benjamin Tissoires
2022-07-16 4:29 ` Yonghong Song
2022-07-18 14:36 ` Benjamin Tissoires
2022-07-19 16:05 ` Yonghong Song
2022-07-16 20:32 ` Kumar Kartikeya Dwivedi
2022-07-18 15:28 ` Benjamin Tissoires
2022-07-12 14:58 ` [PATCH bpf-next v6 06/23] selftests/bpf: Add tests for kfunc returning a memory pointer Benjamin Tissoires
2022-07-16 4:33 ` Yonghong Song [this message]
2022-07-18 8:42 ` Benjamin Tissoires
2022-07-12 14:58 ` [PATCH bpf-next v6 07/23] bpf: prepare for more bpf syscall to be used from kernel and user space Benjamin Tissoires
2022-07-16 4:37 ` Yonghong Song
2022-07-12 14:58 ` [PATCH bpf-next v6 08/23] libbpf: add map_get_fd_by_id and map_delete_elem in light skeleton Benjamin Tissoires
2022-07-16 4:41 ` Yonghong Song
2022-07-12 14:58 ` [PATCH bpf-next v6 09/23] HID: core: store the unique system identifier in hid_device Benjamin Tissoires
2022-07-15 5:00 ` Greg KH
2022-07-12 14:58 ` [PATCH bpf-next v6 10/23] HID: export hid_report_type to uapi Benjamin Tissoires
2022-07-15 5:00 ` Greg KH
2022-07-12 14:58 ` [PATCH bpf-next v6 11/23] HID: convert defines of HID class requests into a proper enum Benjamin Tissoires
2022-07-15 5:01 ` Greg KH
2022-07-12 14:58 ` [PATCH bpf-next v6 12/23] HID: initial BPF implementation Benjamin Tissoires
2022-07-13 8:48 ` Quentin Monnet
2022-07-13 11:36 ` Benjamin Tissoires
2022-07-15 5:02 ` Greg KH
2022-07-15 9:56 ` Benjamin Tissoires
2022-07-15 11:43 ` Greg KH
2022-07-12 14:58 ` [PATCH bpf-next v6 13/23] selftests/bpf: add tests for the HID-bpf initial implementation Benjamin Tissoires
2022-07-12 14:58 ` [PATCH bpf-next v6 14/23] HID: bpf: allocate data memory for device_event BPF programs Benjamin Tissoires
2022-07-12 14:58 ` [PATCH bpf-next v6 15/23] selftests/bpf/hid: add test to change the report size Benjamin Tissoires
2022-07-12 14:58 ` [PATCH bpf-next v6 16/23] HID: bpf: introduce hid_hw_request() Benjamin Tissoires
2022-07-12 14:58 ` [PATCH bpf-next v6 17/23] selftests/bpf: add tests for bpf_hid_hw_request Benjamin Tissoires
2022-07-12 14:58 ` [PATCH bpf-next v6 18/23] HID: bpf: allow to change the report descriptor Benjamin Tissoires
2022-07-12 14:58 ` [PATCH bpf-next v6 19/23] selftests/bpf: add report descriptor fixup tests Benjamin Tissoires
2022-07-12 14:58 ` [PATCH bpf-next v6 20/23] selftests/bpf: Add a test for BPF_F_INSERT_HEAD Benjamin Tissoires
2022-07-12 14:58 ` [PATCH bpf-next v6 21/23] samples/bpf: add new hid_mouse example Benjamin Tissoires
2022-07-13 12:06 ` Dominique Martinet
2022-07-13 12:32 ` Benjamin Tissoires
2022-07-12 14:58 ` [PATCH bpf-next v6 22/23] HID: bpf: add Surface Dial example Benjamin Tissoires
2022-07-12 14:58 ` [PATCH bpf-next v6 23/23] Documentation: add HID-BPF docs Benjamin Tissoires
2022-07-14 21:39 ` [PATCH bpf-next v6 00/23] Introduce eBPF support for HID devices Alexei Starovoitov
2022-07-15 17:34 ` Kumar Kartikeya Dwivedi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=bf56b01d-4c05-0d0b-e85b-219e55606803@fb.com \
--to=yhs@fb.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=benjamin.tissoires@redhat.com \
--cc=bpf@vger.kernel.org \
--cc=corbet@lwn.net \
--cc=daniel@iogearbox.net \
--cc=davemarchevsky@fb.com \
--cc=gregkh@linuxfoundation.org \
--cc=jikos@kernel.org \
--cc=joe@cilium.io \
--cc=john.fastabend@gmail.com \
--cc=kafai@fb.com \
--cc=kpsingh@kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=shuah@kernel.org \
--cc=songliubraving@fb.com \
--cc=tero.kristo@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).