mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

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 <daniel@iogearbox.net> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Acked-by: Eduard Zingerman <eddyz87@gmail.com> Link: https://lore.kernel.org/bpf/20241016134913.32249-3-daniel@iogearbox.net
34 lines
660 B
C
34 lines
660 B
C
// SPDX-License-Identifier: GPL-2.0
|
|
|
|
#include <linux/bpf.h>
|
|
#include <bpf/bpf_helpers.h>
|
|
#include "bpf_misc.h"
|
|
|
|
SEC("socket")
|
|
__description("scalars: find linked scalars")
|
|
__failure
|
|
__msg("math between fp pointer and 2147483647 is not allowed")
|
|
__naked void scalars(void)
|
|
{
|
|
asm volatile (" \
|
|
r0 = 0; \
|
|
r1 = 0x80000001 ll; \
|
|
r1 /= 1; \
|
|
r2 = r1; \
|
|
r4 = r1; \
|
|
w2 += 0x7FFFFFFF; \
|
|
w4 += 0; \
|
|
if r2 == 0 goto l1; \
|
|
exit; \
|
|
l1: \
|
|
r4 >>= 63; \
|
|
r3 = 1; \
|
|
r3 -= r4; \
|
|
r3 *= 0x7FFFFFFF; \
|
|
r3 += r10; \
|
|
*(u8*)(r3 - 1) = r0; \
|
|
exit; \
|
|
" ::: __clobber_all);
|
|
}
|
|
|
|
char _license[] SEC("license") = "GPL";
|