brintos

brintos / linux-shallow public Read only

0
0
Text · 795 B · f37713a Raw
42 lines · c
1// SPDX-License-Identifier: GPL-2.02 3#include <linux/bpf.h>4#include <bpf/bpf_helpers.h>5#include "bpf_misc.h"6 7SEC("socket")8__description("or_jmp32_k: bit ops + branch on unknown value")9__failure10__msg("R0 invalid mem access 'scalar'")11__naked void or_jmp32_k(void)12{13	asm volatile ("					\14	r0 = 0xffffffff;				\15	r0 /= 1;					\16	r1 = 0;						\17	w1 = -1;					\18	w1 >>= 1;					\19	w0 &= w1;					\20	w0 |= 2;					\21	if w0 != 0x7ffffffd goto l1;			\22	r0 = 1;						\23	exit;						\24l3:							\25	r0 = 5;						\26	*(u64*)(r0 - 8) = r0;				\27	exit;						\28l2:							\29	w0 -= 0xe;					\30	if w0 == 1 goto l3;				\31	r0 = 4;						\32	exit;						\33l1:							\34	w0 -= 0x7ffffff0;				\35	if w0 s>= 0xe goto l2;				\36	r0 = 3;						\37	exit;						\38"	::: __clobber_all);39}40 41char _license[] SEC("license") = "GPL";42