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

From: Toke Høiland-Jørgensen <[email-masked]>
Date: Wed, 23 Nov 2022 15:24:23 +0100

>  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