brintos

brintos / linux-shallow public Read only

0
0
Text · 4.3 KiB · c506afb Raw
172 lines · c
1// SPDX-License-Identifier: GPL-2.02/* Converted from tools/testing/selftests/bpf/verifier/bounds_deduction.c */3 4#include <linux/bpf.h>5#include <bpf/bpf_helpers.h>6#include "bpf_misc.h"7 8SEC("socket")9__description("check deducing bounds from const, 1")10__failure __msg("R0 tried to subtract pointer from scalar")11__msg_unpriv("R1 has pointer with unsupported alu operation")12__naked void deducing_bounds_from_const_1(void)13{14	asm volatile ("					\15	r0 = 1;						\16	if r0 s>= 1 goto l0_%=;				\17l0_%=:	r0 -= r1;					\18	exit;						\19"	::: __clobber_all);20}21 22SEC("socket")23__description("check deducing bounds from const, 2")24__success __failure_unpriv25__msg_unpriv("R1 has pointer with unsupported alu operation")26__retval(1)27__naked void deducing_bounds_from_const_2(void)28{29	asm volatile ("					\30	r0 = 1;						\31	if r0 s>= 1 goto l0_%=;				\32	exit;						\33l0_%=:	if r0 s<= 1 goto l1_%=;				\34	exit;						\35l1_%=:	r1 -= r0;					\36	exit;						\37"	::: __clobber_all);38}39 40SEC("socket")41__description("check deducing bounds from const, 3")42__failure __msg("R0 tried to subtract pointer from scalar")43__msg_unpriv("R1 has pointer with unsupported alu operation")44__naked void deducing_bounds_from_const_3(void)45{46	asm volatile ("					\47	r0 = 0;						\48	if r0 s<= 0 goto l0_%=;				\49l0_%=:	r0 -= r1;					\50	exit;						\51"	::: __clobber_all);52}53 54SEC("socket")55__description("check deducing bounds from const, 4")56__success __failure_unpriv57__msg_unpriv("R6 has pointer with unsupported alu operation")58__retval(0)59__naked void deducing_bounds_from_const_4(void)60{61	asm volatile ("					\62	r6 = r1;					\63	r0 = 0;						\64	if r0 s<= 0 goto l0_%=;				\65	exit;						\66l0_%=:	if r0 s>= 0 goto l1_%=;				\67	exit;						\68l1_%=:	r6 -= r0;					\69	exit;						\70"	::: __clobber_all);71}72 73SEC("socket")74__description("check deducing bounds from const, 5")75__failure __msg("R0 tried to subtract pointer from scalar")76__msg_unpriv("R1 has pointer with unsupported alu operation")77__naked void deducing_bounds_from_const_5(void)78{79	asm volatile ("					\80	r0 = 0;						\81	if r0 s>= 1 goto l0_%=;				\82	r0 -= r1;					\83l0_%=:	exit;						\84"	::: __clobber_all);85}86 87SEC("socket")88__description("check deducing bounds from const, 6")89__failure __msg("R0 tried to subtract pointer from scalar")90__msg_unpriv("R1 has pointer with unsupported alu operation")91__naked void deducing_bounds_from_const_6(void)92{93	asm volatile ("					\94	r0 = 0;						\95	if r0 s>= 0 goto l0_%=;				\96	exit;						\97l0_%=:	r0 -= r1;					\98	exit;						\99"	::: __clobber_all);100}101 102SEC("socket")103__description("check deducing bounds from const, 7")104__failure __msg("dereference of modified ctx ptr")105__msg_unpriv("R1 has pointer with unsupported alu operation")106__flag(BPF_F_ANY_ALIGNMENT)107__naked void deducing_bounds_from_const_7(void)108{109	asm volatile ("					\110	r0 = %[__imm_0];				\111	if r0 s>= 0 goto l0_%=;				\112l0_%=:	r1 -= r0;					\113	r0 = *(u32*)(r1 + %[__sk_buff_mark]);		\114	exit;						\115"	:116	: __imm_const(__imm_0, ~0),117	  __imm_const(__sk_buff_mark, offsetof(struct __sk_buff, mark))118	: __clobber_all);119}120 121SEC("socket")122__description("check deducing bounds from const, 8")123__failure __msg("negative offset ctx ptr R1 off=-1 disallowed")124__msg_unpriv("R1 has pointer with unsupported alu operation")125__flag(BPF_F_ANY_ALIGNMENT)126__naked void deducing_bounds_from_const_8(void)127{128	asm volatile ("					\129	r0 = %[__imm_0];				\130	if r0 s>= 0 goto l0_%=;				\131	r1 += r0;					\132l0_%=:	r0 = *(u32*)(r1 + %[__sk_buff_mark]);		\133	exit;						\134"	:135	: __imm_const(__imm_0, ~0),136	  __imm_const(__sk_buff_mark, offsetof(struct __sk_buff, mark))137	: __clobber_all);138}139 140SEC("socket")141__description("check deducing bounds from const, 9")142__failure __msg("R0 tried to subtract pointer from scalar")143__msg_unpriv("R1 has pointer with unsupported alu operation")144__naked void deducing_bounds_from_const_9(void)145{146	asm volatile ("					\147	r0 = 0;						\148	if r0 s>= 0 goto l0_%=;				\149l0_%=:	r0 -= r1;					\150	exit;						\151"	::: __clobber_all);152}153 154SEC("socket")155__description("check deducing bounds from const, 10")156__failure157__msg("math between ctx pointer and register with unbounded min value is not allowed")158__failure_unpriv159__naked void deducing_bounds_from_const_10(void)160{161	asm volatile ("					\162	r0 = 0;						\163	if r0 s<= 0 goto l0_%=;				\164l0_%=:	/* Marks reg as unknown. */			\165	r0 = -r0;					\166	r0 -= r1;					\167	exit;						\168"	::: __clobber_all);169}170 171char _license[] SEC("license") = "GPL";172