xref: /linux/tools/testing/selftests/bpf/verifier/ld_imm64.c (revision c532de5a67a70f8533d495f8f2aaa9a0491c3ad0)
1 {
2 	"test1 ld_imm64",
3 	.insns = {
4 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0, 1),
5 	BPF_LD_IMM64(BPF_REG_0, 0),
6 	BPF_LD_IMM64(BPF_REG_0, 0),
7 	BPF_LD_IMM64(BPF_REG_0, 1),
8 	BPF_LD_IMM64(BPF_REG_0, 1),
9 	BPF_MOV64_IMM(BPF_REG_0, 2),
10 	BPF_EXIT_INSN(),
11 	},
12 	.errstr = "jump into the middle of ldimm64 insn 1",
13 	.errstr_unpriv = "jump into the middle of ldimm64 insn 1",
14 	.result = REJECT,
15 },
16 {
17 	"test2 ld_imm64",
18 	.insns = {
19 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0, 1),
20 	BPF_LD_IMM64(BPF_REG_0, 0),
21 	BPF_LD_IMM64(BPF_REG_0, 0),
22 	BPF_LD_IMM64(BPF_REG_0, 1),
23 	BPF_LD_IMM64(BPF_REG_0, 1),
24 	BPF_EXIT_INSN(),
25 	},
26 	.errstr = "jump into the middle of ldimm64 insn 1",
27 	.errstr_unpriv = "jump into the middle of ldimm64 insn 1",
28 	.result = REJECT,
29 },
30 {
31 	"test3 ld_imm64",
32 	.insns = {
33 	BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0, 1),
34 	BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 0, 0),
35 	BPF_LD_IMM64(BPF_REG_0, 0),
36 	BPF_LD_IMM64(BPF_REG_0, 0),
37 	BPF_LD_IMM64(BPF_REG_0, 1),
38 	BPF_LD_IMM64(BPF_REG_0, 1),
39 	BPF_EXIT_INSN(),
40 	},
41 	.errstr = "invalid bpf_ld_imm64 insn",
42 	.result = REJECT,
43 },
44 {
45 	"test4 ld_imm64",
46 	.insns = {
47 	BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 0, 0),
48 	BPF_EXIT_INSN(),
49 	},
50 	.errstr = "invalid bpf_ld_imm64 insn",
51 	.result = REJECT,
52 },
53 {
54 	"test6 ld_imm64",
55 	.insns = {
56 	BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 0, 0),
57 	BPF_RAW_INSN(0, 0, 0, 0, 0),
58 	BPF_EXIT_INSN(),
59 	},
60 	.result = ACCEPT,
61 },
62 {
63 	"test7 ld_imm64",
64 	.insns = {
65 	BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 0, 1),
66 	BPF_RAW_INSN(0, 0, 0, 0, 1),
67 	BPF_EXIT_INSN(),
68 	},
69 	.result = ACCEPT,
70 	.retval = 1,
71 },
72 {
73 	"test8 ld_imm64",
74 	.insns = {
75 	BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 1, 1),
76 	BPF_RAW_INSN(0, 0, 0, 0, 1),
77 	BPF_EXIT_INSN(),
78 	},
79 	.errstr = "uses reserved fields",
80 	.result = REJECT,
81 },
82 {
83 	"test9 ld_imm64",
84 	.insns = {
85 	BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 0, 1),
86 	BPF_RAW_INSN(0, 0, 0, 1, 1),
87 	BPF_EXIT_INSN(),
88 	},
89 	.errstr = "invalid bpf_ld_imm64 insn",
90 	.result = REJECT,
91 },
92 {
93 	"test10 ld_imm64",
94 	.insns = {
95 	BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 0, 1),
96 	BPF_RAW_INSN(0, BPF_REG_1, 0, 0, 1),
97 	BPF_EXIT_INSN(),
98 	},
99 	.errstr = "invalid bpf_ld_imm64 insn",
100 	.result = REJECT,
101 },
102 {
103 	"test11 ld_imm64",
104 	.insns = {
105 	BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, 0, 0, 1),
106 	BPF_RAW_INSN(0, 0, BPF_REG_1, 0, 1),
107 	BPF_EXIT_INSN(),
108 	},
109 	.errstr = "invalid bpf_ld_imm64 insn",
110 	.result = REJECT,
111 },
112 {
113 	"test12 ld_imm64",
114 	.insns = {
115 	BPF_MOV64_IMM(BPF_REG_1, 0),
116 	BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, BPF_REG_1, 0, 1),
117 	BPF_RAW_INSN(0, 0, 0, 0, 0),
118 	BPF_EXIT_INSN(),
119 	},
120 	.errstr = "not pointing to valid bpf_map",
121 	.result = REJECT,
122 },
123 {
124 	"test13 ld_imm64",
125 	.insns = {
126 	BPF_MOV64_IMM(BPF_REG_1, 0),
127 	BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, 0, BPF_REG_1, 0, 1),
128 	BPF_RAW_INSN(0, 0, BPF_REG_1, 0, 1),
129 	BPF_EXIT_INSN(),
130 	},
131 	.errstr = "invalid bpf_ld_imm64 insn",
132 	.result = REJECT,
133 },
134 {
135 	"test14 ld_imm64: reject 2nd imm != 0",
136 	.insns = {
137 	BPF_MOV64_IMM(BPF_REG_0, 0),
138 	BPF_RAW_INSN(BPF_LD | BPF_IMM | BPF_DW, BPF_REG_1,
139 		     BPF_PSEUDO_MAP_FD, 0, 0),
140 	BPF_RAW_INSN(0, 0, 0, 0, 0xfefefe),
141 	BPF_EXIT_INSN(),
142 	},
143 	.fixup_map_hash_48b = { 1 },
144 	.errstr = "unrecognized bpf_ld_imm64 insn",
145 	.result = REJECT,
146 },
147