BPF List
 help / color / mirror / Atom feed
From: Andrii Nakryiko <andrii@kernel.org>
To: <bpf@vger.kernel.org>, <ast@kernel.org>, <daniel@iogearbox.net>,
	<martin.lau@kernel.org>
Cc: <andrii@kernel.org>, <kernel-team@meta.com>
Subject: [PATCH bpf-next 00/10] BPF verifier retval logic fixes
Date: Tue, 21 Nov 2023 17:16:46 -0800	[thread overview]
Message-ID: <20231122011656.1105943-1-andrii@kernel.org> (raw)

This patch set fixes BPF verifier logic around validating and enforcing return
values for BPF programs that have specific range of expected return values.
Both sync and async callbacks have similar logic and are fixes as well.
A few tests are added that would fail without the fixes in this patch set.

Also, while at it, we extend retval checking logic to use not just tnum value,
but also umin/umax range, avoiding future potential issues if expected range
cannot be represented precisely by tnum (e.g., [0, 2] is not representable by
tnum and is treated as [0, 3]).

There is a little bit of refactoring to unify async callback and program exit
logic to avoid duplication of checks as much as possible.

Andrii Nakryiko (10):
  bpf: rearrange bpf_func_state fields to save a bit of memory
  bpf: provide correct register name for exception callback retval check
  bpf: enforce precision of R0 on callback return
  bpf: enforce exact retval range on subprog/callback exit
  selftests/bpf: add selftest validating callback result is enforced
  bpf: enforce precise retval range on program exit
  bpf: unify async callback and program retval checks
  bpf: enforce precision of R0 on program/async callback return
  selftests/bpf: validate async callback return value check correctness
  selftests/bpf: adjust global_func15 test to validate prog exit
    precision

 include/linux/bpf_verifier.h                  |   9 +-
 kernel/bpf/verifier.c                         | 133 +++++++++++-------
 .../selftests/bpf/progs/exceptions_assert.c   |   2 +-
 .../selftests/bpf/progs/exceptions_fail.c     |   2 +-
 .../selftests/bpf/progs/test_global_func15.c  |  31 +++-
 .../selftests/bpf/progs/timer_failure.c       |  31 ++--
 .../selftests/bpf/progs/user_ringbuf_fail.c   |   2 +-
 .../bpf/progs/verifier_cgroup_inv_retcode.c   |   8 +-
 .../bpf/progs/verifier_netfilter_retcode.c    |   2 +-
 .../bpf/progs/verifier_subprog_precision.c    |  45 ++++++
 10 files changed, 198 insertions(+), 67 deletions(-)

-- 
2.34.1


             reply	other threads:[~2023-11-22  1:17 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-22  1:16 Andrii Nakryiko [this message]
2023-11-22  1:16 ` [PATCH bpf-next 01/10] bpf: rearrange bpf_func_state fields to save a bit of memory Andrii Nakryiko
2023-11-22 15:12   ` Eduard Zingerman
2023-11-22  1:16 ` [PATCH bpf-next 02/10] bpf: provide correct register name for exception callback retval check Andrii Nakryiko
2023-11-22 15:12   ` Eduard Zingerman
2023-11-23  1:44   ` Alexei Starovoitov
2023-11-24  3:39     ` Andrii Nakryiko
2023-11-22  1:16 ` [PATCH bpf-next 03/10] bpf: enforce precision of R0 on callback return Andrii Nakryiko
2023-11-22 15:12   ` Eduard Zingerman
2023-11-22  1:16 ` [PATCH bpf-next 04/10] bpf: enforce exact retval range on subprog/callback exit Andrii Nakryiko
2023-11-22 15:13   ` Eduard Zingerman
2023-11-22 17:45     ` Andrii Nakryiko
2023-11-27 10:55       ` Shung-Hsi Yu
2023-11-27 18:19         ` Andrii Nakryiko
2023-11-22  1:16 ` [PATCH bpf-next 05/10] selftests/bpf: add selftest validating callback result is enforced Andrii Nakryiko
2023-11-22 15:13   ` Eduard Zingerman
2023-11-22 17:46     ` Andrii Nakryiko
2023-11-22  1:16 ` [PATCH bpf-next 06/10] bpf: enforce precise retval range on program exit Andrii Nakryiko
2023-11-22 15:13   ` Eduard Zingerman
2023-11-22  1:16 ` [PATCH bpf-next 07/10] bpf: unify async callback and program retval checks Andrii Nakryiko
2023-11-22 15:13   ` Eduard Zingerman
2023-11-22  1:16 ` [PATCH bpf-next 08/10] bpf: enforce precision of R0 on program/async callback return Andrii Nakryiko
2023-11-22 15:13   ` Eduard Zingerman
2023-11-22  1:16 ` [PATCH bpf-next 09/10] selftests/bpf: validate async callback return value check correctness Andrii Nakryiko
2023-11-22 15:13   ` Eduard Zingerman
2023-11-22  1:16 ` [PATCH bpf-next 10/10] selftests/bpf: adjust global_func15 test to validate prog exit precision Andrii Nakryiko
2023-11-22 15:13   ` Eduard Zingerman

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=20231122011656.1105943-1-andrii@kernel.org \
    --to=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=kernel-team@meta.com \
    --cc=martin.lau@kernel.org \
    /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