~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/testing/selftests/bpf/verifier/basic_instr.c

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 {
  2         "add+sub+mul",
  3         .insns = {
  4         BPF_MOV64_IMM(BPF_REG_1, 1),
  5         BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 2),
  6         BPF_MOV64_IMM(BPF_REG_2, 3),
  7         BPF_ALU64_REG(BPF_SUB, BPF_REG_1, BPF_REG_2),
  8         BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -1),
  9         BPF_ALU64_IMM(BPF_MUL, BPF_REG_1, 3),
 10         BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
 11         BPF_EXIT_INSN(),
 12         },
 13         .result = ACCEPT,
 14         .retval = -3,
 15 },
 16 {
 17         "xor32 zero extend check",
 18         .insns = {
 19         BPF_MOV32_IMM(BPF_REG_2, -1),
 20         BPF_ALU64_IMM(BPF_LSH, BPF_REG_2, 32),
 21         BPF_ALU64_IMM(BPF_OR, BPF_REG_2, 0xffff),
 22         BPF_ALU32_REG(BPF_XOR, BPF_REG_2, BPF_REG_2),
 23         BPF_MOV32_IMM(BPF_REG_0, 2),
 24         BPF_JMP_IMM(BPF_JNE, BPF_REG_2, 0, 1),
 25         BPF_MOV32_IMM(BPF_REG_0, 1),
 26         BPF_EXIT_INSN(),
 27         },
 28         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
 29         .result = ACCEPT,
 30         .retval = 1,
 31 },
 32 {
 33         "arsh32 on imm",
 34         .insns = {
 35         BPF_MOV64_IMM(BPF_REG_0, 1),
 36         BPF_ALU32_IMM(BPF_ARSH, BPF_REG_0, 5),
 37         BPF_EXIT_INSN(),
 38         },
 39         .result = ACCEPT,
 40         .retval = 0,
 41 },
 42 {
 43         "arsh32 on imm 2",
 44         .insns = {
 45         BPF_LD_IMM64(BPF_REG_0, 0x1122334485667788),
 46         BPF_ALU32_IMM(BPF_ARSH, BPF_REG_0, 7),
 47         BPF_EXIT_INSN(),
 48         },
 49         .result = ACCEPT,
 50         .retval = -16069393,
 51 },
 52 {
 53         "arsh32 on reg",
 54         .insns = {
 55         BPF_MOV64_IMM(BPF_REG_0, 1),
 56         BPF_MOV64_IMM(BPF_REG_1, 5),
 57         BPF_ALU32_REG(BPF_ARSH, BPF_REG_0, BPF_REG_1),
 58         BPF_EXIT_INSN(),
 59         },
 60         .result = ACCEPT,
 61         .retval = 0,
 62 },
 63 {
 64         "arsh32 on reg 2",
 65         .insns = {
 66         BPF_LD_IMM64(BPF_REG_0, 0xffff55667788),
 67         BPF_MOV64_IMM(BPF_REG_1, 15),
 68         BPF_ALU32_REG(BPF_ARSH, BPF_REG_0, BPF_REG_1),
 69         BPF_EXIT_INSN(),
 70         },
 71         .result = ACCEPT,
 72         .retval = 43724,
 73 },
 74 {
 75         "arsh64 on imm",
 76         .insns = {
 77         BPF_MOV64_IMM(BPF_REG_0, 1),
 78         BPF_ALU64_IMM(BPF_ARSH, BPF_REG_0, 5),
 79         BPF_EXIT_INSN(),
 80         },
 81         .result = ACCEPT,
 82 },
 83 {
 84         "arsh64 on reg",
 85         .insns = {
 86         BPF_MOV64_IMM(BPF_REG_0, 1),
 87         BPF_MOV64_IMM(BPF_REG_1, 5),
 88         BPF_ALU64_REG(BPF_ARSH, BPF_REG_0, BPF_REG_1),
 89         BPF_EXIT_INSN(),
 90         },
 91         .result = ACCEPT,
 92 },
 93 {
 94         "lsh64 by 0 imm",
 95         .insns = {
 96         BPF_LD_IMM64(BPF_REG_0, 1),
 97         BPF_LD_IMM64(BPF_REG_1, 1),
 98         BPF_ALU64_IMM(BPF_LSH, BPF_REG_1, 0),
 99         BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 1, 1),
100         BPF_MOV64_IMM(BPF_REG_0, 2),
101         BPF_EXIT_INSN(),
102         },
103         .result = ACCEPT,
104         .retval = 1,
105 },
106 {
107         "rsh64 by 0 imm",
108         .insns = {
109         BPF_LD_IMM64(BPF_REG_0, 1),
110         BPF_LD_IMM64(BPF_REG_1, 0x100000000LL),
111         BPF_ALU64_REG(BPF_MOV, BPF_REG_2, BPF_REG_1),
112         BPF_ALU64_IMM(BPF_RSH, BPF_REG_1, 0),
113         BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 1),
114         BPF_MOV64_IMM(BPF_REG_0, 2),
115         BPF_EXIT_INSN(),
116         },
117         .result = ACCEPT,
118         .retval = 1,
119 },
120 {
121         "arsh64 by 0 imm",
122         .insns = {
123         BPF_LD_IMM64(BPF_REG_0, 1),
124         BPF_LD_IMM64(BPF_REG_1, 0x100000000LL),
125         BPF_ALU64_REG(BPF_MOV, BPF_REG_2, BPF_REG_1),
126         BPF_ALU64_IMM(BPF_ARSH, BPF_REG_1, 0),
127         BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 1),
128         BPF_MOV64_IMM(BPF_REG_0, 2),
129         BPF_EXIT_INSN(),
130         },
131         .result = ACCEPT,
132         .retval = 1,
133 },
134 {
135         "lsh64 by 0 reg",
136         .insns = {
137         BPF_LD_IMM64(BPF_REG_0, 1),
138         BPF_LD_IMM64(BPF_REG_1, 1),
139         BPF_LD_IMM64(BPF_REG_2, 0),
140         BPF_ALU64_REG(BPF_LSH, BPF_REG_1, BPF_REG_2),
141         BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 1, 1),
142         BPF_MOV64_IMM(BPF_REG_0, 2),
143         BPF_EXIT_INSN(),
144         },
145         .result = ACCEPT,
146         .retval = 1,
147 },
148 {
149         "rsh64 by 0 reg",
150         .insns = {
151         BPF_LD_IMM64(BPF_REG_0, 1),
152         BPF_LD_IMM64(BPF_REG_1, 0x100000000LL),
153         BPF_ALU64_REG(BPF_MOV, BPF_REG_2, BPF_REG_1),
154         BPF_LD_IMM64(BPF_REG_3, 0),
155         BPF_ALU64_REG(BPF_RSH, BPF_REG_1, BPF_REG_3),
156         BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 1),
157         BPF_MOV64_IMM(BPF_REG_0, 2),
158         BPF_EXIT_INSN(),
159         },
160         .result = ACCEPT,
161         .retval = 1,
162 },
163 {
164         "arsh64 by 0 reg",
165         .insns = {
166         BPF_LD_IMM64(BPF_REG_0, 1),
167         BPF_LD_IMM64(BPF_REG_1, 0x100000000LL),
168         BPF_ALU64_REG(BPF_MOV, BPF_REG_2, BPF_REG_1),
169         BPF_LD_IMM64(BPF_REG_3, 0),
170         BPF_ALU64_REG(BPF_ARSH, BPF_REG_1, BPF_REG_3),
171         BPF_JMP_REG(BPF_JEQ, BPF_REG_1, BPF_REG_2, 1),
172         BPF_MOV64_IMM(BPF_REG_0, 2),
173         BPF_EXIT_INSN(),
174         },
175         .result = ACCEPT,
176         .retval = 1,
177 },
178 {
179         "invalid 64-bit BPF_END with BPF_TO_BE",
180         .insns = {
181         BPF_MOV32_IMM(BPF_REG_0, 0),
182         {
183                 .code  = BPF_ALU64 | BPF_END | BPF_TO_BE,
184                 .dst_reg = BPF_REG_0,
185                 .src_reg = 0,
186                 .off   = 0,
187                 .imm   = 32,
188         },
189         BPF_EXIT_INSN(),
190         },
191         .errstr = "unknown opcode df",
192         .result = REJECT,
193 },
194 {
195         "mov64 src == dst",
196         .insns = {
197         BPF_MOV64_IMM(BPF_REG_2, 0),
198         BPF_MOV64_REG(BPF_REG_2, BPF_REG_2),
199         // Check bounds are OK
200         BPF_ALU64_REG(BPF_ADD, BPF_REG_1, BPF_REG_2),
201         BPF_MOV64_IMM(BPF_REG_0, 0),
202         BPF_EXIT_INSN(),
203         },
204         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
205         .result = ACCEPT,
206 },
207 {
208         "mov64 src != dst",
209         .insns = {
210         BPF_MOV64_IMM(BPF_REG_3, 0),
211         BPF_MOV64_REG(BPF_REG_2, BPF_REG_3),
212         // Check bounds are OK
213         BPF_ALU64_REG(BPF_ADD, BPF_REG_1, BPF_REG_2),
214         BPF_MOV64_IMM(BPF_REG_0, 0),
215         BPF_EXIT_INSN(),
216         },
217         .prog_type = BPF_PROG_TYPE_SCHED_CLS,
218         .result = ACCEPT,
219 },
220 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php