1// SPDX-License-Identifier: GPL-2.0 2/* Converted from tools/testing/selftests/bpf/verifier/cfg.c */ 3 4#include <linux/bpf.h> 5#include <bpf/bpf_helpers.h> 6#include "bpf_misc.h" 7 8SEC("socket") 9__description("unreachable") 10__failure __msg("unreachable") 11__failure_unpriv 12__naked void unreachable(void) 13{ 14 asm volatile (" \ 15 exit; \ 16 exit; \ 17" ::: __clobber_all); 18} 19 20SEC("socket") 21__description("unreachable2") 22__failure __msg("unreachable") 23__failure_unpriv 24__naked void unreachable2(void) 25{ 26 asm volatile (" \ 27 goto l0_%=; \ 28 goto l0_%=; \ 29l0_%=: exit; \ 30" ::: __clobber_all); 31} 32 33SEC("socket") 34__description("out of range jump") 35__failure __msg("jump out of range") 36__failure_unpriv 37__naked void out_of_range_jump(void) 38{ 39 asm volatile (" \ 40 goto l0_%=; \ 41 exit; \ 42l0_%=: \ 43" ::: __clobber_all); 44} 45 46SEC("socket") 47__description("out of range jump2") 48__failure __msg("jump out of range") 49__failure_unpriv 50__naked void out_of_range_jump2(void) 51{ 52 asm volatile (" \ 53 goto -2; \ 54 exit; \ 55" ::: __clobber_all); 56} 57 58SEC("socket") 59__description("loop (back-edge)") 60__failure __msg("unreachable insn 1") 61__msg_unpriv("back-edge") 62__naked void loop_back_edge(void) 63{ 64 asm volatile (" \ 65l0_%=: goto l0_%=; \ 66 exit; \ 67" ::: __clobber_all); 68} 69 70SEC("socket") 71__description("loop2 (back-edge)") 72__failure __msg("unreachable insn 4") 73__msg_unpriv("back-edge") 74__naked void loop2_back_edge(void) 75{ 76 asm volatile (" \ 77l0_%=: r1 = r0; \ 78 r2 = r0; \ 79 r3 = r0; \ 80 goto l0_%=; \ 81 exit; \ 82" ::: __clobber_all); 83} 84 85SEC("socket") 86__description("conditional loop") 87__failure __msg("infinite loop detected") 88__msg_unpriv("back-edge") 89__naked void conditional_loop(void) 90{ 91 asm volatile (" \ 92 r0 = r1; \ 93l0_%=: r2 = r0; \ 94 r3 = r0; \ 95 if r1 == 0 goto l0_%=; \ 96 exit; \ 97" ::: __clobber_all); 98} 99 100char _license[] SEC("license") = "GPL"; 101