Message ID | 20230220163756.753713-1-iii@linux.ibm.com (mailing list archive) |
---|---|
State | Accepted |
Commit | df2ccc180a2e6f6e4343ebee99dcfab4f8af2816 |
Delegated to: | BPF |
Headers | show |
Series | [bpf-next] bpf: Check for helper calls in check_subprogs() | expand |
On Mon, Feb 20, 2023 at 8:38 AM Ilya Leoshkevich <iii@linux.ibm.com> wrote: > > The condition src_reg != BPF_PSEUDO_CALL && imm == BPF_FUNC_tail_call > may be satisfied by a kfunc call. This would lead to unnecessarily > setting has_tail_call. Use src_reg == 0 instead. Acked-by: Stanislav Fomichev <sdf@google.com> (although not sure on src_reg == 0 vs !src_reg. Alexei seems to be favoring the latter?) > Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> > --- > kernel/bpf/verifier.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c > index e63af41a7e95..6d4632476c9c 100644 > --- a/kernel/bpf/verifier.c > +++ b/kernel/bpf/verifier.c > @@ -2462,8 +2462,8 @@ static int check_subprogs(struct bpf_verifier_env *env) > u8 code = insn[i].code; > > if (code == (BPF_JMP | BPF_CALL) && > - insn[i].imm == BPF_FUNC_tail_call && > - insn[i].src_reg != BPF_PSEUDO_CALL) > + insn[i].src_reg == 0 && > + insn[i].imm == BPF_FUNC_tail_call) > subprog[cur_subprog].has_tail_call = true; > if (BPF_CLASS(code) == BPF_LD && > (BPF_MODE(code) == BPF_ABS || BPF_MODE(code) == BPF_IND)) > -- > 2.39.1 >
Hello: This patch was applied to bpf/bpf-next.git (master) by Alexei Starovoitov <ast@kernel.org>: On Mon, 20 Feb 2023 17:37:56 +0100 you wrote: > The condition src_reg != BPF_PSEUDO_CALL && imm == BPF_FUNC_tail_call > may be satisfied by a kfunc call. This would lead to unnecessarily > setting has_tail_call. Use src_reg == 0 instead. > > Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> > --- > kernel/bpf/verifier.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) Here is the summary with links: - [bpf-next] bpf: Check for helper calls in check_subprogs() https://git.kernel.org/bpf/bpf-next/c/df2ccc180a2e You are awesome, thank you!
diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index e63af41a7e95..6d4632476c9c 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -2462,8 +2462,8 @@ static int check_subprogs(struct bpf_verifier_env *env) u8 code = insn[i].code; if (code == (BPF_JMP | BPF_CALL) && - insn[i].imm == BPF_FUNC_tail_call && - insn[i].src_reg != BPF_PSEUDO_CALL) + insn[i].src_reg == 0 && + insn[i].imm == BPF_FUNC_tail_call) subprog[cur_subprog].has_tail_call = true; if (BPF_CLASS(code) == BPF_LD && (BPF_MODE(code) == BPF_ABS || BPF_MODE(code) == BPF_IND))
The condition src_reg != BPF_PSEUDO_CALL && imm == BPF_FUNC_tail_call may be satisfied by a kfunc call. This would lead to unnecessarily setting has_tail_call. Use src_reg == 0 instead. Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> --- kernel/bpf/verifier.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)