Linux Audio

Check our new training course

Linux BSP development engineering services

Need help to port Linux and bootloaders to your hardware?
Loading...
v6.13.7
  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},
v5.4
  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",
180	.insns = {
181	BPF_MOV32_IMM(BPF_REG_0, 0),
182	{
183		.code  = BPF_ALU64 | BPF_END | BPF_TO_LE,
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 d7",
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},