Re: [xdp-hints] [PATCH bpf-next v2 2/8] bpf: XDP metadata RX kfuncs

Toke Høiland-Jørgensen
2022-11-23T14:28:54Z

> static int fixup_kfunc_call(struct bpf_verifier_env *env, struct bpf_insn *insn,
> struct bpf_insn *insn_buf, int insn_idx, int *cnt)
> {
> @@ -15181,6 +15200,15 @@ static int fixup_kfunc_call(struct bpf_verifier_env *env, struct bpf_insn *insn,
> return -EINVAL;
> }
>
> + if (resolve_prog_type(env->prog) == BPF_PROG_TYPE_XDP) {
> + int imm = fixup_xdp_kfunc_call(env, insn->imm);
> +
> + if (imm) {
> + insn->imm = imm;
> + return 0;

This needs to also set *cnt = 0 before returning; otherwise the verifier
can do some really weird instruction rewriting that leads to the JIT
barfing on invalid instructions (as I just found out while trying to
test this).

-Toke