Skip to content

Commit db123e4

Browse files
borkmannanakryiko
authored andcommitted
selftests/bpf: Add test case for delta propagation
Add a small BPF verifier test case to ensure that alu32 additions to registers are not subject to linked scalar delta tracking. # ./vmtest.sh -- ./test_progs -t verifier_linked_scalars [...] ./test_progs -t verifier_linked_scalars [ 1.413138] tsc: Refined TSC clocksource calibration: 3407.993 MHz [ 1.413524] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x311fcd52370, max_idle_ns: 440795242006 ns [ 1.414223] clocksource: Switched to clocksource tsc [ 1.419640] bpf_testmod: loading out-of-tree module taints kernel. [ 1.420025] bpf_testmod: module verification failed: signature and/or required key missing - tainting kernel #500/1 verifier_linked_scalars/scalars: find linked scalars:OK #500 verifier_linked_scalars:OK Summary: 1/1 PASSED, 0 SKIPPED, 0 FAILED [ 1.590858] ACPI: PM: Preparing to enter system sleep state S5 [ 1.591402] reboot: Power down [...] Signed-off-by: Daniel Borkmann <[email protected]> Signed-off-by: Andrii Nakryiko <[email protected]> Acked-by: Eduard Zingerman <[email protected]> Link: https://lore.kernel.org/bpf/[email protected]
1 parent 3e9e708 commit db123e4

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-0
lines changed

tools/testing/selftests/bpf/prog_tests/verifier.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
#include "verifier_ld_ind.skel.h"
4545
#include "verifier_ldsx.skel.h"
4646
#include "verifier_leak_ptr.skel.h"
47+
#include "verifier_linked_scalars.skel.h"
4748
#include "verifier_loops1.skel.h"
4849
#include "verifier_lwt.skel.h"
4950
#include "verifier_map_in_map.skel.h"
@@ -170,6 +171,7 @@ void test_verifier_jit_convergence(void) { RUN(verifier_jit_convergence); }
170171
void test_verifier_ld_ind(void) { RUN(verifier_ld_ind); }
171172
void test_verifier_ldsx(void) { RUN(verifier_ldsx); }
172173
void test_verifier_leak_ptr(void) { RUN(verifier_leak_ptr); }
174+
void test_verifier_linked_scalars(void) { RUN(verifier_linked_scalars); }
173175
void test_verifier_loops1(void) { RUN(verifier_loops1); }
174176
void test_verifier_lwt(void) { RUN(verifier_lwt); }
175177
void test_verifier_map_in_map(void) { RUN(verifier_map_in_map); }
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// SPDX-License-Identifier: GPL-2.0
2+
3+
#include <linux/bpf.h>
4+
#include <bpf/bpf_helpers.h>
5+
#include "bpf_misc.h"
6+
7+
SEC("socket")
8+
__description("scalars: find linked scalars")
9+
__failure
10+
__msg("math between fp pointer and 2147483647 is not allowed")
11+
__naked void scalars(void)
12+
{
13+
asm volatile (" \
14+
r0 = 0; \
15+
r1 = 0x80000001 ll; \
16+
r1 /= 1; \
17+
r2 = r1; \
18+
r4 = r1; \
19+
w2 += 0x7FFFFFFF; \
20+
w4 += 0; \
21+
if r2 == 0 goto l1; \
22+
exit; \
23+
l1: \
24+
r4 >>= 63; \
25+
r3 = 1; \
26+
r3 -= r4; \
27+
r3 *= 0x7FFFFFFF; \
28+
r3 += r10; \
29+
*(u8*)(r3 - 1) = r0; \
30+
exit; \
31+
" ::: __clobber_all);
32+
}
33+
34+
char _license[] SEC("license") = "GPL";

0 commit comments

Comments
 (0)