From: Lorenz Bauer <lmb@cloudflare.com>
To: ast@kernel.org, yhs@fb.com, daniel@iogearbox.net, kafai@fb.com,
andriin@fb.com
Cc: bpf@vger.kernel.org, kernel-team@cloudflare.com,
Lorenz Bauer <lmb@cloudflare.com>
Subject: [PATCH bpf-next v2 00/11] Make check_func_arg type checks table driven
Date: Wed, 9 Sep 2020 18:11:44 +0100 [thread overview]
Message-ID: <20200909171155.256601-1-lmb@cloudflare.com> (raw)
Thanks for all the valuable feedback! The series now doesn't depend
on sockmap iterator anymore. All of this is refactoring, no
functional changes are intended.
Once this + sockmap iter are merged I'll submit a series that
introduces ARG_PTR_TO_SOCK_COMMON_OR_NULL which aliases with
a BTF struct sock_common*. This in turn will allow me to call
map_update_elem(sockmap) from bpf_iter context.
Changes in v2:
- Make the series stand alone (Martin)
- Drop incorrect BTF_SET_START fix (Andrii)
- Only support a single BTF ID per argument (Martin)
- Introduce BTF_ID_LIST_SINGLE macro (Andrii)
- Skip check_ctx_reg iff register is NULL
- Change output of check_reg_type slightly, to avoid touching tests
Original cover letter:
Currently, check_func_arg has this pretty gnarly if statement that
compares the valid arg_type with the actualy reg_type. Sprinkled
in-between are checks for register_is_null, to short circuit these
tests if we're dealing with a nullable arg_type. There is also some
code for later bounds / access checking hidden away in there.
This series of patches refactors the function into something like this:
if (reg_is_null && arg_type_is_nullable)
skip type checking
do type checking, including BTF validation
do bounds / access checking
The type checking is now table driven, which makes it easy to extend
the acceptable types. Maybe more importantly, using a table makes it
easy to provide more helpful verifier output (see the last patch).
Lorenz Bauer (11):
btf: make btf_set_contains take a const pointer
bpf: check scalar or invalid register in check_helper_mem_access
btf: Add BTF_ID_LIST_SINGLE macro
bpf: allow specifying a BTF ID per argument in function protos
bpf: make BTF pointer type checking generic
bpf: make reference tracking generic
bpf: make context access check generic
bpf: set meta->raw_mode for pointers close to use
bpf: check ARG_PTR_TO_SPINLOCK register type in check_func_arg
bpf: hoist type checking for nullable arg types
bpf: use a table to drive helper arg type checks
include/linux/bpf.h | 21 ++-
include/linux/btf_ids.h | 7 +
kernel/bpf/bpf_inode_storage.c | 8 +-
kernel/bpf/btf.c | 15 +-
kernel/bpf/stackmap.c | 5 +-
kernel/bpf/verifier.c | 332 ++++++++++++++++++---------------
kernel/trace/bpf_trace.c | 15 +-
net/core/bpf_sk_storage.c | 10 +-
net/core/filter.c | 31 +--
net/ipv4/bpf_tcp_ca.c | 19 +-
10 files changed, 227 insertions(+), 236 deletions(-)
--
2.25.1
next reply other threads:[~2020-09-09 17:12 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-09 17:11 Lorenz Bauer [this message]
2020-09-09 17:11 ` [PATCH bpf-next v2 01/11] btf: make btf_set_contains take a const pointer Lorenz Bauer
2020-09-09 17:11 ` [PATCH bpf-next v2 02/11] bpf: check scalar or invalid register in check_helper_mem_access Lorenz Bauer
2020-09-09 17:11 ` [PATCH bpf-next v2 03/11] btf: Add BTF_ID_LIST_SINGLE macro Lorenz Bauer
2020-09-09 18:09 ` Martin KaFai Lau
2020-09-10 18:49 ` Andrii Nakryiko
2020-09-09 17:11 ` [PATCH bpf-next v2 04/11] bpf: allow specifying a BTF ID per argument in function protos Lorenz Bauer
2020-09-09 20:03 ` Martin KaFai Lau
2020-09-10 11:36 ` Lorenz Bauer
2020-09-10 18:51 ` Andrii Nakryiko
2020-09-09 17:11 ` [PATCH bpf-next v2 05/11] bpf: make BTF pointer type checking generic Lorenz Bauer
2020-09-09 20:15 ` Martin KaFai Lau
2020-09-09 17:11 ` [PATCH bpf-next v2 06/11] bpf: make reference tracking generic Lorenz Bauer
2020-09-09 20:21 ` Martin KaFai Lau
2020-09-09 17:11 ` [PATCH bpf-next v2 07/11] bpf: make context access check generic Lorenz Bauer
2020-09-09 20:42 ` Martin KaFai Lau
2020-09-09 17:11 ` [PATCH bpf-next v2 08/11] bpf: set meta->raw_mode for pointers close to use Lorenz Bauer
2020-09-09 21:04 ` Martin KaFai Lau
2020-09-09 17:11 ` [PATCH bpf-next v2 09/11] bpf: check ARG_PTR_TO_SPINLOCK register type in check_func_arg Lorenz Bauer
2020-09-09 21:14 ` Martin KaFai Lau
2020-09-09 17:11 ` [PATCH bpf-next v2 10/11] bpf: hoist type checking for nullable arg types Lorenz Bauer
2020-09-09 21:28 ` Martin KaFai Lau
2020-09-09 17:11 ` [PATCH bpf-next v2 11/11] bpf: use a table to drive helper arg type checks Lorenz Bauer
2020-09-09 22:22 ` Martin KaFai Lau
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=20200909171155.256601-1-lmb@cloudflare.com \
--to=lmb@cloudflare.com \
--cc=andriin@fb.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=kafai@fb.com \
--cc=kernel-team@cloudflare.com \
--cc=yhs@fb.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