Hi Greg, On Mon, Jul 24, 2023 at 03:42:18PM GMT, Eduard Zingerman wrote: > [ Upstream commit be2ef8161572ec1973124ebc50f56dafc2925e07 ] > ... > --- a/kernel/bpf/verifier.c > +++ b/kernel/bpf/verifier.c ... > @@ -2670,6 +2679,11 @@ static int backtrack_insn(struct bpf_verifier_env *env, int idx, > */ > if (insn->src_reg == BPF_PSEUDO_KFUNC_CALL && insn->imm == 0) > return -ENOTSUPP; > + /* BPF helpers that invoke callback subprogs are > + * equivalent to BPF_PSEUDO_CALL above > + */ > + if (insn->src_reg == 0 && is_callback_calling_function(insn->imm)) > + return -ENOTSUPP; > /* regular helper call sets R0 */ > *reg_mask &= ~1; > if (*reg_mask & 0x3f) { Looks like the above hunk is slightly misplaced. In master the lines are added _before_ the BPF_PSEUDO_KFUNC_CALL check, resulting in deviation from upstream as well as interfering with backporting of commit be2ef8161572 ("bpf: allow precision tracking for programs with subprogs") to stable v6.1. What would be the suggested action here? 1. Send a updated version of the whole be2ef8161572 patch to stable 2. Send a minimal refresh patch like the one found in this email to stable 3. Adapt to this deviation in my backport of commit be2ef8161572 for stable Shung-Hsi ... diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 5d4510fb2be7..227dc10f6baa 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -2673,17 +2673,17 @@ static int backtrack_insn(struct bpf_verifier_env *env, int idx, if (opcode == BPF_CALL) { if (insn->src_reg == BPF_PSEUDO_CALL) return -ENOTSUPP; + /* BPF helpers that invoke callback subprogs are + * equivalent to BPF_PSEUDO_CALL above + */ + if (insn->src_reg == 0 && is_callback_calling_function(insn->imm)) + return -ENOTSUPP; /* kfunc with imm==0 is invalid and fixup_kfunc_call will * catch this error later. Make backtracking conservative * with ENOTSUPP. */ if (insn->src_reg == BPF_PSEUDO_KFUNC_CALL && insn->imm == 0) return -ENOTSUPP; - /* BPF helpers that invoke callback subprogs are - * equivalent to BPF_PSEUDO_CALL above - */ - if (insn->src_reg == 0 && is_callback_calling_function(insn->imm)) - return -ENOTSUPP; /* regular helper call sets R0 */ *reg_mask &= ~1; if (*reg_mask & 0x3f) {