[PATCH bpf-next 1/8] bpf/verifier: Handle BPF_LOAD_ACQ instructions in insn_def_regno()
Peilin Ye
yepeilin at google.com
Tue May 6 17:18:43 PDT 2025
Hi Lehui,
On Tue, May 06, 2025 at 10:03:59PM +0800, Pu Lehui wrote:
> On 2025/4/30 8:50, Peilin Ye wrote:
> > --- a/kernel/bpf/verifier.c
> > +++ b/kernel/bpf/verifier.c
> > @@ -3649,13 +3649,16 @@ static int insn_def_regno(const struct bpf_insn *insn)
> > case BPF_ST:
> > return -1;
> > case BPF_STX:
> > - if ((BPF_MODE(insn->code) == BPF_ATOMIC ||
> > - BPF_MODE(insn->code) == BPF_PROBE_ATOMIC) &&
> > - (insn->imm & BPF_FETCH)) {
> > + if (BPF_MODE(insn->code) == BPF_ATOMIC ||
> > + BPF_MODE(insn->code) == BPF_PROBE_ATOMIC) {
> > if (insn->imm == BPF_CMPXCHG)
> > return BPF_REG_0;
> > - else
> > + else if (insn->imm == BPF_LOAD_ACQ)
> > + return insn->dst_reg;
> > + else if (insn->imm & BPF_FETCH)
> > return insn->src_reg;
> > + else
> > + return -1;
> > } else {
> > return -1;
> > }
>
> How about simplify like this:
> ```
> static int insn_def_regno(const struct bpf_insn *insn)
> {
> switch (BPF_CLASS(insn->code)) {
> case BPF_JMP:
> case BPF_JMP32:
> case BPF_ST:
> return -1;
> case BPF_STX:
> if (BPF_MODE(insn->code) == BPF_ATOMIC ||
> BPF_MODE(insn->code) == BPF_PROBE_ATOMIC) {
> if (insn->imm == BPF_CMPXCHG)
> return BPF_REG_0;
> else if (insn->imm == BPF_LOAD_ACQ)
> return insn->dst_reg;
> else if (insn->imm & BPF_FETCH)
> return insn->src_reg;
> }
> return -1;
> default:
> return insn->dst_reg;
> }
> }
> ```
I see, I'll change it in v2. Thanks for the suggestion!
Peilin Ye
More information about the linux-riscv
mailing list