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

source code of linux/tools/testing/selftests/bpf/verifier/ld_imm64.c