]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftests/bpf: Add test for truncation after sign extension in coerce_reg_to_size_sx()
authorDimitar Kanaliev <dimitar.kanaliev@siteground.com>
Mon, 14 Oct 2024 12:11:54 +0000 (15:11 +0300)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 15 Oct 2024 18:16:25 +0000 (11:16 -0700)
Add test that checks whether unsigned ranges deduced by the verifier for
sign extension instruction is correct. Without previous patch that
fixes truncation in coerce_reg_to_size_sx() this test fails.

Acked-by: Shung-Hsi Yu <shung-hsi.yu@suse.com>
Signed-off-by: Dimitar Kanaliev <dimitar.kanaliev@siteground.com>
Acked-by: Yonghong Song <yonghong.song@linux.dev>
Link: https://lore.kernel.org/r/20241014121155.92887-3-dimitar.kanaliev@siteground.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/progs/verifier_movsx.c

index 028ec855587bea6c0313f5b35698a6d6dfda3534..0cb879c609c5705d403ddd2a2e0c68072a25bc12 100644 (file)
@@ -287,6 +287,26 @@ l0_%=:                                                     \
        : __clobber_all);
 }
 
+SEC("socket")
+__description("MOV64SX, S8, unsigned range_check")
+__success __retval(0)
+__naked void mov64sx_s8_range_check(void)
+{
+       asm volatile ("                                 \
+       call %[bpf_get_prandom_u32];                    \
+       r0 &= 0x1;                                      \
+       r0 += 0xfe;                                     \
+       r0 = (s8)r0;                                    \
+       if r0 < 0xfffffffffffffffe goto label_%=;       \
+       r0 = 0;                                         \
+       exit;                                           \
+label_%=:                                              \
+       exit;                                           \
+"      :
+       : __imm(bpf_get_prandom_u32)
+       : __clobber_all);
+}
+
 #else
 
 SEC("socket")