Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144// SPDX-License-Identifier: GPL-2.0/* Converted from tools/testing/selftests/bpf/verifier/basic_stack.c */
#include <linux/bpf.h>#include <bpf/bpf_helpers.h>#include "bpf_misc.h"
struct { __uint(type, BPF_MAP_TYPE_HASH); __uint(max_entries, 1); __type(key, long long); __type(value, long long);} map_hash_8b SEC(".maps");
SEC("socket")__description("stack out of bounds")__failure __msg("invalid write to stack")__failure_unpriv__naked void stack_out_of_bounds(void){ asm volatile (" \ r1 = 0; \ *(u64*)(r10 + 8) = r1; \ exit; \" ::: __clobber_all);}
SEC("socket")__description("uninitialized stack1")__success __log_level(4)__msg("subprog 0 (uninitialized_stack1) main {{.*}} stack 8")__failure_unpriv __msg_unpriv("invalid read from stack")__naked void uninitialized_stack1(void){ asm volatile (" \ r2 = r10; \ r2 += -8; \ r1 = %[map_hash_8b] ll; \ call %[bpf_map_lookup_elem]; \ exit; \" : : __imm(bpf_map_lookup_elem), __imm_addr(map_hash_8b) : __clobber_all);}
SEC("socket")__description("uninitialized stack2")__success __log_level(4)__msg("subprog 0 (uninitialized_stack2) main insns_self {{[0-9]+}} insns_total {{[0-9]+}} stack 8")__failure_unpriv __msg_unpriv("invalid read from stack")__naked void uninitialized_stack2(void){ asm volatile (" \ r2 = r10; \ r0 = *(u64*)(r2 - 8); \ exit; \" ::: __clobber_all);}
SEC("socket")__description("invalid fp arithmetic")__failure __msg("R1 subtraction from stack pointer")__failure_unpriv__naked void invalid_fp_arithmetic(void){ /* If this gets ever changed, make sure JITs can deal with it. */ asm volatile (" \ r0 = 0; \ r1 = r10; \ r1 -= 8; \ *(u64*)(r1 + 0) = r0; \ exit; \" ::: __clobber_all);}
SEC("socket")__description("non-invalid fp arithmetic")__success __success_unpriv __retval(0)__naked void non_invalid_fp_arithmetic(void){ asm volatile (" \ r0 = 0; \ *(u64*)(r10 - 8) = r0; \ exit; \" ::: __clobber_all);}
SEC("socket")__description("misaligned read from stack")__failure __msg("misaligned stack access")__failure_unpriv__naked void misaligned_read_from_stack(void){ asm volatile (" \ r2 = r10; \ r0 = *(u64*)(r2 - 4); \ exit; \" ::: __clobber_all);}
SEC("socket")__description("stack pointer arithmetic preserves frame number")__failure __msg("R7 invalid mem access 'scalar'")__naked void stack_ptr_arith_preserves_frameno(void){ asm volatile ("\ r3 = 0; \ *(u64 *)(r10 - 8) = r3; \ r1 = %[map_hash_8b] ll; \ r2 = r10; \ r2 += -8; \ call %[bpf_map_lookup_elem]; \ if r0 != 0 goto +2; \ r0 = 0; \ exit; \ r1 = r0; \ r2 = 0; \ r3 = 0; \ call stack_ptr_arith_preserves_frameno_subprog;\ r0 = 0; \ exit; \ ": : __imm(bpf_map_lookup_elem), __imm_addr(map_hash_8b) : __clobber_all);}
static __used __naked void stack_ptr_arith_preserves_frameno_subprog(void){ asm volatile ("\ *(u64 *)(r10 - 8) = r1; \ r6 = -8; \ r6 += r10; \ *(u64 *)(r6 + 0) = r2; \ r7 = *(u64 *)(r10 - 8); \ *(u64 *)(r7 + 0) = r3; \ r0 = 0; \ exit; \ "::: __clobber_all);}
char _license[] SEC("license") = "GPL";