brintos

brintos / linux-shallow public Read only

0
0
Text · 13.9 KiB · f420c03 Raw
445 lines · c
1/* Common tests */2{3	"map_kptr: BPF_ST imm != 0",4	.insns = {5	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),6	BPF_LD_MAP_FD(BPF_REG_6, 0),7	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),8	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),9	BPF_MOV64_IMM(BPF_REG_0, 0),10	BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0),11	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),12	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),13	BPF_EXIT_INSN(),14	BPF_ST_MEM(BPF_DW, BPF_REG_0, 0, 1),15	BPF_EXIT_INSN(),16	},17	.prog_type = BPF_PROG_TYPE_SCHED_CLS,18	.fixup_map_kptr = { 1 },19	.result = REJECT,20	.errstr = "BPF_ST imm must be 0 when storing to kptr at off=0",21},22{23	"map_kptr: size != bpf_size_to_bytes(BPF_DW)",24	.insns = {25	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),26	BPF_LD_MAP_FD(BPF_REG_6, 0),27	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),28	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),29	BPF_MOV64_IMM(BPF_REG_0, 0),30	BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0),31	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),32	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),33	BPF_EXIT_INSN(),34	BPF_ST_MEM(BPF_W, BPF_REG_0, 0, 0),35	BPF_EXIT_INSN(),36	},37	.prog_type = BPF_PROG_TYPE_SCHED_CLS,38	.fixup_map_kptr = { 1 },39	.result = REJECT,40	.errstr = "kptr access size must be BPF_DW",41},42{43	"map_kptr: map_value non-const var_off",44	.insns = {45	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),46	BPF_LD_MAP_FD(BPF_REG_6, 0),47	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),48	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),49	BPF_MOV64_IMM(BPF_REG_0, 0),50	BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0),51	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),52	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),53	BPF_EXIT_INSN(),54	BPF_MOV64_REG(BPF_REG_3, BPF_REG_0),55	BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_0, 0),56	BPF_JMP_IMM(BPF_JNE, BPF_REG_2, 0, 1),57	BPF_EXIT_INSN(),58	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_2, 0),59	BPF_JMP_IMM(BPF_JLE, BPF_REG_2, 4, 1),60	BPF_EXIT_INSN(),61	BPF_JMP_IMM(BPF_JGE, BPF_REG_2, 0, 1),62	BPF_EXIT_INSN(),63	BPF_ALU64_REG(BPF_ADD, BPF_REG_3, BPF_REG_2),64	BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_3, 0),65	BPF_EXIT_INSN(),66	},67	.prog_type = BPF_PROG_TYPE_SCHED_CLS,68	.fixup_map_kptr = { 1 },69	.result = REJECT,70	.errstr = "kptr access cannot have variable offset",71	.flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,72},73{74	"map_kptr: bpf_kptr_xchg non-const var_off",75	.insns = {76	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),77	BPF_LD_MAP_FD(BPF_REG_6, 0),78	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),79	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),80	BPF_MOV64_IMM(BPF_REG_0, 0),81	BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0),82	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),83	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),84	BPF_EXIT_INSN(),85	BPF_MOV64_REG(BPF_REG_3, BPF_REG_0),86	BPF_LDX_MEM(BPF_DW, BPF_REG_2, BPF_REG_0, 0),87	BPF_JMP_IMM(BPF_JNE, BPF_REG_2, 0, 1),88	BPF_EXIT_INSN(),89	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_2, 0),90	BPF_JMP_IMM(BPF_JLE, BPF_REG_2, 4, 1),91	BPF_EXIT_INSN(),92	BPF_JMP_IMM(BPF_JGE, BPF_REG_2, 0, 1),93	BPF_EXIT_INSN(),94	BPF_ALU64_REG(BPF_ADD, BPF_REG_3, BPF_REG_2),95	BPF_MOV64_REG(BPF_REG_1, BPF_REG_3),96	BPF_MOV64_IMM(BPF_REG_2, 0),97	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_kptr_xchg),98	BPF_EXIT_INSN(),99	},100	.prog_type = BPF_PROG_TYPE_SCHED_CLS,101	.fixup_map_kptr = { 1 },102	.result = REJECT,103	.errstr = "R1 doesn't have constant offset. kptr has to be at the constant offset",104},105{106	"map_kptr: unaligned boundary load/store",107	.insns = {108	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),109	BPF_LD_MAP_FD(BPF_REG_6, 0),110	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),111	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),112	BPF_MOV64_IMM(BPF_REG_0, 0),113	BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0),114	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),115	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),116	BPF_EXIT_INSN(),117	BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 7),118	BPF_ST_MEM(BPF_DW, BPF_REG_0, 0, 0),119	BPF_EXIT_INSN(),120	},121	.prog_type = BPF_PROG_TYPE_SCHED_CLS,122	.fixup_map_kptr = { 1 },123	.result = REJECT,124	.errstr = "kptr access misaligned expected=0 off=7",125	.flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,126},127{128	"map_kptr: reject var_off != 0",129	.insns = {130	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),131	BPF_LD_MAP_FD(BPF_REG_6, 0),132	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),133	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),134	BPF_MOV64_IMM(BPF_REG_0, 0),135	BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0),136	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),137	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),138	BPF_EXIT_INSN(),139	BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0, 0),140	BPF_JMP_IMM(BPF_JNE, BPF_REG_1, 0, 1),141	BPF_EXIT_INSN(),142	BPF_LDX_MEM(BPF_W, BPF_REG_2, BPF_REG_1, 0),143	BPF_JMP_IMM(BPF_JLE, BPF_REG_2, 4, 1),144	BPF_EXIT_INSN(),145	BPF_JMP_IMM(BPF_JGE, BPF_REG_2, 0, 1),146	BPF_EXIT_INSN(),147	BPF_ALU64_REG(BPF_ADD, BPF_REG_1, BPF_REG_2),148	BPF_STX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 0),149	BPF_EXIT_INSN(),150	},151	.prog_type = BPF_PROG_TYPE_SCHED_CLS,152	.fixup_map_kptr = { 1 },153	.result = REJECT,154	.errstr = "variable untrusted_ptr_ access var_off=(0x0; 0x7) disallowed",155},156/* Tests for unreferenced PTR_TO_BTF_ID */157{158	"map_kptr: unref: reject btf_struct_ids_match == false",159	.insns = {160	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),161	BPF_LD_MAP_FD(BPF_REG_6, 0),162	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),163	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),164	BPF_MOV64_IMM(BPF_REG_0, 0),165	BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0),166	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),167	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),168	BPF_EXIT_INSN(),169	BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0, 0),170	BPF_JMP_IMM(BPF_JNE, BPF_REG_1, 0, 1),171	BPF_EXIT_INSN(),172	BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 4),173	BPF_STX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 0),174	BPF_EXIT_INSN(),175	},176	.prog_type = BPF_PROG_TYPE_SCHED_CLS,177	.fixup_map_kptr = { 1 },178	.result = REJECT,179	.errstr = "invalid kptr access, R1 type=untrusted_ptr_prog_test_ref_kfunc expected=ptr_prog_test",180},181{182	"map_kptr: unref: loaded pointer marked as untrusted",183	.insns = {184	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),185	BPF_LD_MAP_FD(BPF_REG_6, 0),186	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),187	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),188	BPF_MOV64_IMM(BPF_REG_0, 0),189	BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0),190	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),191	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),192	BPF_EXIT_INSN(),193	BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),194	BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_0, 0),195	BPF_EXIT_INSN(),196	},197	.prog_type = BPF_PROG_TYPE_SCHED_CLS,198	.fixup_map_kptr = { 1 },199	.result = REJECT,200	.errstr = "R0 invalid mem access 'untrusted_ptr_or_null_'",201},202{203	"map_kptr: unref: correct in kernel type size",204	.insns = {205	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),206	BPF_LD_MAP_FD(BPF_REG_6, 0),207	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),208	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),209	BPF_MOV64_IMM(BPF_REG_0, 0),210	BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0),211	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),212	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),213	BPF_EXIT_INSN(),214	BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),215	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),216	BPF_EXIT_INSN(),217	BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 32),218	BPF_EXIT_INSN(),219	},220	.prog_type = BPF_PROG_TYPE_SCHED_CLS,221	.fixup_map_kptr = { 1 },222	.result = REJECT,223	.errstr = "access beyond struct prog_test_ref_kfunc at off 32 size 8",224},225{226	"map_kptr: unref: inherit PTR_UNTRUSTED on struct walk",227	.insns = {228	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),229	BPF_LD_MAP_FD(BPF_REG_6, 0),230	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),231	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),232	BPF_MOV64_IMM(BPF_REG_0, 0),233	BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0),234	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),235	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),236	BPF_EXIT_INSN(),237	BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),238	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),239	BPF_EXIT_INSN(),240	BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0, 16),241	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_this_cpu_ptr),242	BPF_EXIT_INSN(),243	},244	.prog_type = BPF_PROG_TYPE_SCHED_CLS,245	.fixup_map_kptr = { 1 },246	.result = REJECT,247	.errstr = "R1 type=untrusted_ptr_ expected=percpu_ptr_",248},249{250	"map_kptr: unref: no reference state created",251	.insns = {252	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),253	BPF_LD_MAP_FD(BPF_REG_6, 0),254	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),255	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),256	BPF_MOV64_IMM(BPF_REG_0, 0),257	BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0),258	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),259	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),260	BPF_EXIT_INSN(),261	BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_0, 0),262	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),263	BPF_EXIT_INSN(),264	BPF_EXIT_INSN(),265	},266	.prog_type = BPF_PROG_TYPE_SCHED_CLS,267	.fixup_map_kptr = { 1 },268	.result = ACCEPT,269},270{271	"map_kptr: unref: bpf_kptr_xchg rejected",272	.insns = {273	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),274	BPF_LD_MAP_FD(BPF_REG_6, 0),275	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),276	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),277	BPF_MOV64_IMM(BPF_REG_0, 0),278	BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0),279	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),280	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),281	BPF_EXIT_INSN(),282	BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),283	BPF_MOV64_IMM(BPF_REG_2, 0),284	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_kptr_xchg),285	BPF_MOV64_IMM(BPF_REG_0, 0),286	BPF_EXIT_INSN(),287	},288	.prog_type = BPF_PROG_TYPE_SCHED_CLS,289	.fixup_map_kptr = { 1 },290	.result = REJECT,291	.errstr = "off=0 kptr isn't referenced kptr",292},293/* Tests for referenced PTR_TO_BTF_ID */294{295	"map_kptr: ref: loaded pointer marked as untrusted",296	.insns = {297	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),298	BPF_LD_MAP_FD(BPF_REG_6, 0),299	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),300	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),301	BPF_MOV64_IMM(BPF_REG_0, 0),302	BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0),303	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),304	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),305	BPF_EXIT_INSN(),306	BPF_MOV64_IMM(BPF_REG_1, 0),307	BPF_LDX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0, 8),308	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_this_cpu_ptr),309	BPF_EXIT_INSN(),310	},311	.prog_type = BPF_PROG_TYPE_SCHED_CLS,312	.fixup_map_kptr = { 1 },313	.result = REJECT,314	.errstr = "R1 type=rcu_ptr_or_null_ expected=percpu_ptr_",315},316{317	"map_kptr: ref: reject off != 0",318	.insns = {319	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),320	BPF_LD_MAP_FD(BPF_REG_6, 0),321	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),322	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),323	BPF_MOV64_IMM(BPF_REG_0, 0),324	BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0),325	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),326	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),327	BPF_EXIT_INSN(),328	BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),329	BPF_MOV64_REG(BPF_REG_7, BPF_REG_0),330	BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),331	BPF_MOV64_IMM(BPF_REG_2, 0),332	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_kptr_xchg),333	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),334	BPF_EXIT_INSN(),335	BPF_MOV64_REG(BPF_REG_1, BPF_REG_7),336	BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, 8),337	BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),338	BPF_MOV64_REG(BPF_REG_2, BPF_REG_0),339	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_kptr_xchg),340	BPF_EXIT_INSN(),341	},342	.prog_type = BPF_PROG_TYPE_SCHED_CLS,343	.fixup_map_kptr = { 1 },344	.result = REJECT,345	.errstr = "invalid kptr access, R2 type=ptr_prog_test_ref_kfunc expected=ptr_prog_test_member",346},347{348	"map_kptr: ref: reference state created and released on xchg",349	.insns = {350	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),351	BPF_LD_MAP_FD(BPF_REG_6, 0),352	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),353	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),354	BPF_MOV64_IMM(BPF_REG_0, 0),355	BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0),356	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),357	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),358	BPF_EXIT_INSN(),359	BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 8),360	BPF_MOV64_REG(BPF_REG_7, BPF_REG_0),361	BPF_MOV64_REG(BPF_REG_1, BPF_REG_10),362	BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -8),363	BPF_ST_MEM(BPF_DW, BPF_REG_1, 0, 0),364	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, BPF_PSEUDO_KFUNC_CALL, 0, 0),365	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),366	BPF_EXIT_INSN(),367	BPF_MOV64_REG(BPF_REG_1, BPF_REG_7),368	BPF_MOV64_REG(BPF_REG_2, BPF_REG_0),369	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_kptr_xchg),370	BPF_MOV64_IMM(BPF_REG_0, 0),371	BPF_EXIT_INSN(),372	},373	.prog_type = BPF_PROG_TYPE_SCHED_CLS,374	.fixup_map_kptr = { 1 },375	.result = REJECT,376	.errstr = "Unreleased reference id=5 alloc_insn=20",377	.fixup_kfunc_btf_id = {378		{ "bpf_kfunc_call_test_acquire", 15 },379	}380},381{382	"map_kptr: ref: reject STX",383	.insns = {384	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),385	BPF_LD_MAP_FD(BPF_REG_6, 0),386	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),387	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),388	BPF_MOV64_IMM(BPF_REG_0, 0),389	BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0),390	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),391	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),392	BPF_EXIT_INSN(),393	BPF_MOV64_REG(BPF_REG_1, 0),394	BPF_STX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, 8),395	BPF_EXIT_INSN(),396	},397	.prog_type = BPF_PROG_TYPE_SCHED_CLS,398	.fixup_map_kptr = { 1 },399	.result = REJECT,400	.errstr = "store to referenced kptr disallowed",401},402{403	"map_kptr: ref: reject ST",404	.insns = {405	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),406	BPF_LD_MAP_FD(BPF_REG_6, 0),407	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),408	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),409	BPF_MOV64_IMM(BPF_REG_0, 0),410	BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0),411	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),412	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),413	BPF_EXIT_INSN(),414	BPF_ST_MEM(BPF_DW, BPF_REG_0, 8, 0),415	BPF_EXIT_INSN(),416	},417	.prog_type = BPF_PROG_TYPE_SCHED_CLS,418	.fixup_map_kptr = { 1 },419	.result = REJECT,420	.errstr = "store to referenced kptr disallowed",421},422{423	"map_kptr: reject helper access to kptr",424	.insns = {425	BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),426	BPF_LD_MAP_FD(BPF_REG_6, 0),427	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),428	BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4),429	BPF_MOV64_IMM(BPF_REG_0, 0),430	BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0),431	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),432	BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1),433	BPF_EXIT_INSN(),434	BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),435	BPF_ALU64_IMM(BPF_ADD, BPF_REG_0, 2),436	BPF_MOV64_REG(BPF_REG_2, BPF_REG_0),437	BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_delete_elem),438	BPF_EXIT_INSN(),439	},440	.prog_type = BPF_PROG_TYPE_SCHED_CLS,441	.fixup_map_kptr = { 1 },442	.result = REJECT,443	.errstr = "kptr cannot be accessed indirectly by helper",444},445