111 lines · c
1// SPDX-License-Identifier: GPL-2.02/* Converted from tools/testing/selftests/bpf/verifier/ld_ind.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("ld_ind: check calling conv, r1")11__failure __msg("R1 !read_ok")12__failure_unpriv13__naked void ind_check_calling_conv_r1(void)14{15 asm volatile (" \16 r6 = r1; \17 r1 = 1; \18 .8byte %[ld_ind]; \19 r0 = r1; \20 exit; \21" :22 : __imm_insn(ld_ind, BPF_LD_IND(BPF_W, BPF_REG_1, -0x200000))23 : __clobber_all);24}25 26SEC("socket")27__description("ld_ind: check calling conv, r2")28__failure __msg("R2 !read_ok")29__failure_unpriv30__naked void ind_check_calling_conv_r2(void)31{32 asm volatile (" \33 r6 = r1; \34 r2 = 1; \35 .8byte %[ld_ind]; \36 r0 = r2; \37 exit; \38" :39 : __imm_insn(ld_ind, BPF_LD_IND(BPF_W, BPF_REG_2, -0x200000))40 : __clobber_all);41}42 43SEC("socket")44__description("ld_ind: check calling conv, r3")45__failure __msg("R3 !read_ok")46__failure_unpriv47__naked void ind_check_calling_conv_r3(void)48{49 asm volatile (" \50 r6 = r1; \51 r3 = 1; \52 .8byte %[ld_ind]; \53 r0 = r3; \54 exit; \55" :56 : __imm_insn(ld_ind, BPF_LD_IND(BPF_W, BPF_REG_3, -0x200000))57 : __clobber_all);58}59 60SEC("socket")61__description("ld_ind: check calling conv, r4")62__failure __msg("R4 !read_ok")63__failure_unpriv64__naked void ind_check_calling_conv_r4(void)65{66 asm volatile (" \67 r6 = r1; \68 r4 = 1; \69 .8byte %[ld_ind]; \70 r0 = r4; \71 exit; \72" :73 : __imm_insn(ld_ind, BPF_LD_IND(BPF_W, BPF_REG_4, -0x200000))74 : __clobber_all);75}76 77SEC("socket")78__description("ld_ind: check calling conv, r5")79__failure __msg("R5 !read_ok")80__failure_unpriv81__naked void ind_check_calling_conv_r5(void)82{83 asm volatile (" \84 r6 = r1; \85 r5 = 1; \86 .8byte %[ld_ind]; \87 r0 = r5; \88 exit; \89" :90 : __imm_insn(ld_ind, BPF_LD_IND(BPF_W, BPF_REG_5, -0x200000))91 : __clobber_all);92}93 94SEC("socket")95__description("ld_ind: check calling conv, r7")96__success __success_unpriv __retval(1)97__naked void ind_check_calling_conv_r7(void)98{99 asm volatile (" \100 r6 = r1; \101 r7 = 1; \102 .8byte %[ld_ind]; \103 r0 = r7; \104 exit; \105" :106 : __imm_insn(ld_ind, BPF_LD_IND(BPF_W, BPF_REG_7, -0x200000))107 : __clobber_all);108}109 110char _license[] SEC("license") = "GPL";111