mirror of
https://github.com/torvalds/linux
synced 2024-10-15 15:59:15 +00:00
selftests/bpf: XOR and OR range computation tests.
Added a test for bound computation in XOR and OR 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> 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> Cc: Andrii Nakryiko <andrii.nakryiko@gmail.com> Link: https://lore.kernel.org/r/20240506141849.185293-5-cupertino.miranda@oracle.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
138cc42c05
commit
5ec9a7d13f
|
@ -885,6 +885,48 @@ l1_%=: r0 = 0; \
|
|||
: __clobber_all);
|
||||
}
|
||||
|
||||
SEC("socket")
|
||||
__description("bounds check for non const xor src dst")
|
||||
__success __log_level(2)
|
||||
__msg("5: (af) r0 ^= r6 ; R0_w=scalar(smin=smin32=0,smax=umax=smax32=umax32=431,var_off=(0x0; 0x1af))")
|
||||
__naked void non_const_xor_src_dst(void)
|
||||
{
|
||||
asm volatile (" \
|
||||
call %[bpf_get_prandom_u32]; \
|
||||
r6 = r0; \
|
||||
call %[bpf_get_prandom_u32]; \
|
||||
r6 &= 0xaf; \
|
||||
r0 &= 0x1a0; \
|
||||
r0 ^= r6; \
|
||||
exit; \
|
||||
" :
|
||||
: __imm(bpf_map_lookup_elem),
|
||||
__imm_addr(map_hash_8b),
|
||||
__imm(bpf_get_prandom_u32)
|
||||
: __clobber_all);
|
||||
}
|
||||
|
||||
SEC("socket")
|
||||
__description("bounds check for non const or src dst")
|
||||
__success __log_level(2)
|
||||
__msg("5: (4f) r0 |= r6 ; R0_w=scalar(smin=smin32=0,smax=umax=smax32=umax32=431,var_off=(0x0; 0x1af))")
|
||||
__naked void non_const_or_src_dst(void)
|
||||
{
|
||||
asm volatile (" \
|
||||
call %[bpf_get_prandom_u32]; \
|
||||
r6 = r0; \
|
||||
call %[bpf_get_prandom_u32]; \
|
||||
r6 &= 0xaf; \
|
||||
r0 &= 0x1a0; \
|
||||
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")
|
||||
|
|
Loading…
Reference in a new issue