62 lines · c
1// SPDX-License-Identifier: GPL-2.02/* Converted from tools/testing/selftests/bpf/verifier/uninit.c */3 4#include <linux/bpf.h>5#include <bpf/bpf_helpers.h>6#include "../../../include/linux/filter.h"7#include "bpf_misc.h"8 9SEC("socket")10__description("read uninitialized register")11__failure __msg("R2 !read_ok")12__failure_unpriv13__naked void read_uninitialized_register(void)14{15 asm volatile (" \16 r0 = r2; \17 exit; \18" ::: __clobber_all);19}20 21SEC("socket")22__description("read invalid register")23__failure __msg("R15 is invalid")24__failure_unpriv25__naked void read_invalid_register(void)26{27 asm volatile (" \28 .8byte %[mov64_reg]; \29 exit; \30" :31 : __imm_insn(mov64_reg, BPF_MOV64_REG(BPF_REG_0, -1))32 : __clobber_all);33}34 35SEC("socket")36__description("program doesn't init R0 before exit")37__failure __msg("R0 !read_ok")38__failure_unpriv39__naked void t_init_r0_before_exit(void)40{41 asm volatile (" \42 r2 = r1; \43 exit; \44" ::: __clobber_all);45}46 47SEC("socket")48__description("program doesn't init R0 before exit in all branches")49__failure __msg("R0 !read_ok")50__msg_unpriv("R1 pointer comparison")51__naked void before_exit_in_all_branches(void)52{53 asm volatile (" \54 if r1 >= 0 goto l0_%=; \55 r0 = 1; \56 r0 += 2; \57l0_%=: exit; \58" ::: __clobber_all);59}60 61char _license[] SEC("license") = "GPL";62