All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH bpf-next v2 00/11] Make check_func_arg type checks table driven
@ 2020-09-09 17:11 Lorenz Bauer
  2020-09-09 17:11 ` [PATCH bpf-next v2 01/11] btf: make btf_set_contains take a const pointer Lorenz Bauer
                   ` (10 more replies)
  0 siblings, 11 replies; 24+ messages in thread
From: Lorenz Bauer @ 2020-09-09 17:11 UTC (permalink / raw)
  To: ast, yhs, daniel, kafai, andriin; +Cc: bpf, kernel-team, Lorenz Bauer

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


^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2020-09-10 21:58 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-09 17:11 [PATCH bpf-next v2 00/11] Make check_func_arg type checks table driven Lorenz Bauer
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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.