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