83 lines · c
1// SPDX-License-Identifier: GPL-2.02/* Converted from tools/testing/selftests/bpf/verifier/const_or.c */3 4#include <linux/bpf.h>5#include <bpf/bpf_helpers.h>6#include "bpf_misc.h"7 8SEC("tracepoint")9__description("constant register |= constant should keep constant type")10__success11__naked void constant_should_keep_constant_type(void)12{13 asm volatile (" \14 r1 = r10; \15 r1 += -48; \16 r2 = 34; \17 r2 |= 13; \18 r3 = 0; \19 call %[bpf_probe_read_kernel]; \20 exit; \21" :22 : __imm(bpf_probe_read_kernel)23 : __clobber_all);24}25 26SEC("tracepoint")27__description("constant register |= constant should not bypass stack boundary checks")28__failure __msg("invalid indirect access to stack R1 off=-48 size=58")29__naked void not_bypass_stack_boundary_checks_1(void)30{31 asm volatile (" \32 r1 = r10; \33 r1 += -48; \34 r2 = 34; \35 r2 |= 24; \36 r3 = 0; \37 call %[bpf_probe_read_kernel]; \38 exit; \39" :40 : __imm(bpf_probe_read_kernel)41 : __clobber_all);42}43 44SEC("tracepoint")45__description("constant register |= constant register should keep constant type")46__success47__naked void register_should_keep_constant_type(void)48{49 asm volatile (" \50 r1 = r10; \51 r1 += -48; \52 r2 = 34; \53 r4 = 13; \54 r2 |= r4; \55 r3 = 0; \56 call %[bpf_probe_read_kernel]; \57 exit; \58" :59 : __imm(bpf_probe_read_kernel)60 : __clobber_all);61}62 63SEC("tracepoint")64__description("constant register |= constant register should not bypass stack boundary checks")65__failure __msg("invalid indirect access to stack R1 off=-48 size=58")66__naked void not_bypass_stack_boundary_checks_2(void)67{68 asm volatile (" \69 r1 = r10; \70 r1 += -48; \71 r2 = 34; \72 r4 = 24; \73 r2 |= r4; \74 r3 = 0; \75 call %[bpf_probe_read_kernel]; \76 exit; \77" :78 : __imm(bpf_probe_read_kernel)79 : __clobber_all);80}81 82char _license[] SEC("license") = "GPL";83