1// SPDX-License-Identifier: GPL-2.0
2/* 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_unpriv
13__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_unpriv
30__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_unpriv
47__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_unpriv
64__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_unpriv
81__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

source code of linux/tools/testing/selftests/bpf/progs/verifier_ld_ind.c