diff options
author | Cupertino Miranda <cupertino.miranda@oracle.com> | 2024-05-06 15:18:49 +0100 |
---|---|---|
committer | Alexei Starovoitov <ast@kernel.org> | 2024-05-06 17:09:12 -0700 |
commit | 92956786b4e26ea22e5b3c1c86cc71f5c9b3b9d8 (patch) | |
tree | d5c433c0d9cf68d1e208cc06512d49f00d9e3a33 /tools/testing/selftests/bpf/progs/verifier_bounds.c | |
parent | 41d047a871062f1a4d1871a1908d380c14e75428 (diff) | |
download | linux-stable-92956786b4e26ea22e5b3c1c86cc71f5c9b3b9d8.tar.gz linux-stable-92956786b4e26ea22e5b3c1c86cc71f5c9b3b9d8.tar.bz2 linux-stable-92956786b4e26ea22e5b3c1c86cc71f5c9b3b9d8.zip |
selftests/bpf: MUL range computation tests.
Added a test for bound computation in MUL when non constant
values are used and both registers have bounded ranges.
Signed-off-by: Cupertino Miranda <cupertino.miranda@oracle.com>
Acked-by: Eduard Zingerman <eddyz87@gmail.com>
Acked-by: Andrii Nakryiko <andrii.nakryiko@gmail.com>
Cc: Yonghong Song <yonghong.song@linux.dev>
Cc: Alexei Starovoitov <alexei.starovoitov@gmail.com>
Cc: David Faust <david.faust@oracle.com>
Cc: Jose Marchesi <jose.marchesi@oracle.com>
Cc: Elena Zannoni <elena.zannoni@oracle.com>
Link: https://lore.kernel.org/r/20240506141849.185293-7-cupertino.miranda@oracle.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'tools/testing/selftests/bpf/progs/verifier_bounds.c')
-rw-r--r-- | tools/testing/selftests/bpf/progs/verifier_bounds.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/progs/verifier_bounds.c b/tools/testing/selftests/bpf/progs/verifier_bounds.c index 7d570acf23ee..a0bb7fb40ea5 100644 --- a/tools/testing/selftests/bpf/progs/verifier_bounds.c +++ b/tools/testing/selftests/bpf/progs/verifier_bounds.c @@ -928,6 +928,27 @@ __naked void non_const_or_src_dst(void) } SEC("socket") +__description("bounds check for non const mul regs") +__success __log_level(2) +__msg("5: (2f) r0 *= r6 ; R0_w=scalar(smin=smin32=0,smax=umax=smax32=umax32=3825,var_off=(0x0; 0xfff))") +__naked void non_const_mul_regs(void) +{ + asm volatile (" \ + call %[bpf_get_prandom_u32]; \ + r6 = r0; \ + call %[bpf_get_prandom_u32]; \ + r6 &= 0xff; \ + r0 &= 0x0f; \ + r0 *= r6; \ + exit; \ +" : + : __imm(bpf_map_lookup_elem), + __imm_addr(map_hash_8b), + __imm(bpf_get_prandom_u32) + : __clobber_all); +} + +SEC("socket") __description("bounds checks after 32-bit truncation. test 1") __success __failure_unpriv __msg_unpriv("R0 leaks addr") __retval(0) |