[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200921121227.255763-1-lmb@cloudflare.com>
Date: Mon, 21 Sep 2020 13:12:16 +0100
From: Lorenz Bauer <lmb@...udflare.com>
To: ast@...nel.org, daniel@...earbox.net
Cc: bpf@...r.kernel.org, netdev@...r.kernel.org,
Lorenz Bauer <lmb@...udflare.com>
Subject: [PATCH RESEND bpf-next v4 00/11] Make check_func_arg type checks table driven
I'm not sure why, but I missed sending the patchset to netdev@ last
week. I guess that is why it's slipped through the cracks.
Changes in v4:
- Output the desired type on BTF ID mismatch (Martin)
Changes in v3:
- Fix BTF_ID_LIST_SINGLE if BTF is disabled (Martin)
- Drop incorrect arg_btf_id in bpf_sk_storage.c (Martin)
- Check for arg_btf_id in check_func_proto (Martin)
- Drop incorrect PTR_TO_BTF_ID from fullsock_types (Martin)
- Introduce btf_seq_file_ids in bpf_trace.c to reduce duplication
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 | 8 +
kernel/bpf/bpf_inode_storage.c | 8 +-
kernel/bpf/btf.c | 15 +-
kernel/bpf/stackmap.c | 5 +-
kernel/bpf/verifier.c | 338 ++++++++++++++++++---------------
kernel/trace/bpf_trace.c | 15 +-
net/core/bpf_sk_storage.c | 8 +-
net/core/filter.c | 31 +--
net/ipv4/bpf_tcp_ca.c | 19 +-
tools/include/linux/btf_ids.h | 8 +
11 files changed, 239 insertions(+), 237 deletions(-)
--
2.25.1
Powered by blists - more mailing lists