Lines Matching refs:meta

48 nfp_bpf_goto_meta(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta,  in nfp_bpf_goto_meta()  argument
53 backward = meta->n - insn_idx; in nfp_bpf_goto_meta()
54 forward = insn_idx - meta->n; in nfp_bpf_goto_meta()
58 meta = nfp_prog_last_meta(nfp_prog); in nfp_bpf_goto_meta()
62 meta = nfp_prog_first_meta(nfp_prog); in nfp_bpf_goto_meta()
67 meta = nfp_meta_next(meta); in nfp_bpf_goto_meta()
70 meta = nfp_meta_prev(meta); in nfp_bpf_goto_meta()
72 return meta; in nfp_bpf_goto_meta()
77 struct nfp_insn_meta *meta, in nfp_record_adjust_head() argument
99 if (nfp_prog->adjust_head_location != meta->n) in nfp_record_adjust_head()
102 if (meta->arg2.reg.var_off.value != imm) in nfp_record_adjust_head()
106 location = meta->n; in nfp_record_adjust_head()
146 struct nfp_insn_meta *meta, in nfp_bpf_map_call_ok() argument
159 struct nfp_insn_meta *meta) in nfp_bpf_check_call() argument
165 u32 func_id = meta->insn.imm; in nfp_bpf_check_call()
178 nfp_record_adjust_head(bpf, nfp_prog, meta, reg2); in nfp_bpf_check_call()
189 if (!nfp_bpf_map_call_ok("map_lookup", env, meta, in nfp_bpf_check_call()
192 meta->func_id ? &meta->arg2 : NULL)) in nfp_bpf_check_call()
197 if (!nfp_bpf_map_call_ok("map_update", env, meta, in nfp_bpf_check_call()
200 meta->func_id ? &meta->arg2 : NULL) || in nfp_bpf_check_call()
206 if (!nfp_bpf_map_call_ok("map_delete", env, meta, in nfp_bpf_check_call()
209 meta->func_id ? &meta->arg2 : NULL)) in nfp_bpf_check_call()
274 if (!meta->func_id) in nfp_bpf_check_call()
277 if (reg1->type != meta->arg1.type) { in nfp_bpf_check_call()
279 meta->arg1.type, reg1->type); in nfp_bpf_check_call()
289 meta->func_id = func_id; in nfp_bpf_check_call()
290 meta->arg1 = *reg1; in nfp_bpf_check_call()
291 meta->arg2.reg = *reg2; in nfp_bpf_check_call()
330 struct nfp_insn_meta *meta, in nfp_bpf_check_stack_access() argument
341 if (meta->ptr.type == NOT_INIT) in nfp_bpf_check_stack_access()
344 old_off = meta->ptr.off + meta->ptr.var_off.value; in nfp_bpf_check_stack_access()
347 meta->ptr_not_const |= old_off != new_off; in nfp_bpf_check_stack_access()
349 if (!meta->ptr_not_const) in nfp_bpf_check_stack_access()
393 nfp_bpf_map_mark_used(struct bpf_verifier_env *env, struct nfp_insn_meta *meta, in nfp_bpf_map_mark_used() argument
407 off = reg->var_off.value + meta->insn.off + reg->off; in nfp_bpf_map_mark_used()
408 size = BPF_LDST_BYTES(&meta->insn); in nfp_bpf_map_mark_used()
427 nfp_bpf_check_ptr(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta, in nfp_bpf_check_ptr() argument
442 err = nfp_bpf_check_stack_access(nfp_prog, meta, reg, env); in nfp_bpf_check_ptr()
448 if (is_mbpf_load(meta)) { in nfp_bpf_check_ptr()
449 err = nfp_bpf_map_mark_used(env, meta, reg, in nfp_bpf_check_ptr()
454 if (is_mbpf_store(meta)) { in nfp_bpf_check_ptr()
458 if (is_mbpf_xadd(meta)) { in nfp_bpf_check_ptr()
459 err = nfp_bpf_map_mark_used(env, meta, reg, in nfp_bpf_check_ptr()
466 if (meta->ptr.type != NOT_INIT && meta->ptr.type != reg->type) { in nfp_bpf_check_ptr()
468 meta->ptr.type, reg->type); in nfp_bpf_check_ptr()
472 meta->ptr = *reg; in nfp_bpf_check_ptr()
478 nfp_bpf_check_store(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta, in nfp_bpf_check_store() argument
481 const struct bpf_reg_state *reg = cur_regs(env) + meta->insn.dst_reg; in nfp_bpf_check_store()
486 switch (meta->insn.off) { in nfp_bpf_check_store()
498 return nfp_bpf_check_ptr(nfp_prog, meta, env, meta->insn.dst_reg); in nfp_bpf_check_store()
502 nfp_bpf_check_xadd(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta, in nfp_bpf_check_xadd() argument
505 const struct bpf_reg_state *sreg = cur_regs(env) + meta->insn.src_reg; in nfp_bpf_check_xadd()
506 const struct bpf_reg_state *dreg = cur_regs(env) + meta->insn.dst_reg; in nfp_bpf_check_xadd()
518 meta->xadd_over_16bit |= in nfp_bpf_check_xadd()
520 meta->xadd_maybe_16bit |= in nfp_bpf_check_xadd()
523 return nfp_bpf_check_ptr(nfp_prog, meta, env, meta->insn.dst_reg); in nfp_bpf_check_xadd()
527 nfp_bpf_check_alu(struct nfp_prog *nfp_prog, struct nfp_insn_meta *meta, in nfp_bpf_check_alu() argument
531 cur_regs(env) + meta->insn.src_reg; in nfp_bpf_check_alu()
533 cur_regs(env) + meta->insn.dst_reg; in nfp_bpf_check_alu()
535 meta->umin_src = min(meta->umin_src, sreg->umin_value); in nfp_bpf_check_alu()
536 meta->umax_src = max(meta->umax_src, sreg->umax_value); in nfp_bpf_check_alu()
537 meta->umin_dst = min(meta->umin_dst, dreg->umin_value); in nfp_bpf_check_alu()
538 meta->umax_dst = max(meta->umax_dst, dreg->umax_value); in nfp_bpf_check_alu()
552 if (is_mbpf_mul(meta)) { in nfp_bpf_check_alu()
553 if (meta->umax_dst > U32_MAX) { in nfp_bpf_check_alu()
557 if (mbpf_src(meta) == BPF_X && meta->umax_src > U32_MAX) { in nfp_bpf_check_alu()
561 if (mbpf_class(meta) == BPF_ALU64 && in nfp_bpf_check_alu()
562 mbpf_src(meta) == BPF_K && meta->insn.imm < 0) { in nfp_bpf_check_alu()
578 if (is_mbpf_div(meta)) { in nfp_bpf_check_alu()
579 if (meta->umax_dst > U32_MAX) { in nfp_bpf_check_alu()
583 if (mbpf_src(meta) == BPF_X) { in nfp_bpf_check_alu()
584 if (meta->umin_src != meta->umax_src) { in nfp_bpf_check_alu()
588 if (meta->umax_src > U32_MAX) { in nfp_bpf_check_alu()
593 if (mbpf_src(meta) == BPF_K && meta->insn.imm < 0) { in nfp_bpf_check_alu()
606 struct nfp_insn_meta *meta = nfp_prog->verifier_meta; in nfp_verify_insn() local
608 meta = nfp_bpf_goto_meta(nfp_prog, meta, insn_idx, env->prog->len); in nfp_verify_insn()
609 nfp_prog->verifier_meta = meta; in nfp_verify_insn()
611 if (!nfp_bpf_supported_opcode(meta->insn.code)) { in nfp_verify_insn()
613 meta->insn.code); in nfp_verify_insn()
617 if (meta->insn.src_reg >= MAX_BPF_REG || in nfp_verify_insn()
618 meta->insn.dst_reg >= MAX_BPF_REG) { in nfp_verify_insn()
623 if (meta->insn.code == (BPF_JMP | BPF_CALL)) in nfp_verify_insn()
624 return nfp_bpf_check_call(nfp_prog, env, meta); in nfp_verify_insn()
625 if (meta->insn.code == (BPF_JMP | BPF_EXIT)) in nfp_verify_insn()
628 if (is_mbpf_load(meta)) in nfp_verify_insn()
629 return nfp_bpf_check_ptr(nfp_prog, meta, env, in nfp_verify_insn()
630 meta->insn.src_reg); in nfp_verify_insn()
631 if (is_mbpf_store(meta)) in nfp_verify_insn()
632 return nfp_bpf_check_store(nfp_prog, meta, env); in nfp_verify_insn()
634 if (is_mbpf_xadd(meta)) in nfp_verify_insn()
635 return nfp_bpf_check_xadd(nfp_prog, meta, env); in nfp_verify_insn()
637 if (is_mbpf_alu(meta)) in nfp_verify_insn()
638 return nfp_bpf_check_alu(nfp_prog, meta, env); in nfp_verify_insn()