brintos

brintos / linux-shallow public Read only

0
0
Text · 1.9 KiB · ba8922b Raw
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