Message ID | 426699046d89fe50f66ecf74bd31c01eda976ba5.1625145429.git.naveen.n.rao@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | powerpc/bpf: Fix issue with atomic ops | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/apply_patch | success | Successfully applied on branch powerpc/merge (e289c2e239c638cab7e71143e0a65c7c4a057ad7) |
snowpatch_ozlabs/build-ppc64le | success | Build succeeded |
snowpatch_ozlabs/build-ppc64be | success | Build succeeded |
snowpatch_ozlabs/build-ppc64e | success | Build succeeded |
snowpatch_ozlabs/build-pmac32 | success | Build succeeded |
snowpatch_ozlabs/checkpatch | warning | total: 0 errors, 2 warnings, 1 checks, 27 lines checked |
snowpatch_ozlabs/needsstable | success | Patch has no Fixes tags |
Le 01/07/2021 à 17:08, Naveen N. Rao a écrit : > Commit 91c960b0056672 ("bpf: Rename BPF_XADD and prepare to encode other > atomics in .imm") converted BPF_XADD to BPF_ATOMIC and updated all JIT > implementations to reject JIT'ing instructions with an immediate value > different from BPF_ADD. However, ppc32 BPF JIT was implemented around > the same time and didn't include the same change. Update the ppc32 JIT > accordingly. > > Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> Shouldn't it also include a Fixes tag and stable Cc as PPC32 eBPF was added in 5.13 ? Fixes: 51c66ad849a7 ("powerpc/bpf: Implement extended BPF on PPC32") Cc: stable@vger.kernel.org > --- > arch/powerpc/net/bpf_jit_comp32.c | 14 +++++++++++--- > 1 file changed, 11 insertions(+), 3 deletions(-) > > diff --git a/arch/powerpc/net/bpf_jit_comp32.c b/arch/powerpc/net/bpf_jit_comp32.c > index cbe5b399ed869d..91c990335a16c9 100644 > --- a/arch/powerpc/net/bpf_jit_comp32.c > +++ b/arch/powerpc/net/bpf_jit_comp32.c > @@ -773,9 +773,17 @@ int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, struct codegen_context * > break; > > /* > - * BPF_STX XADD (atomic_add) > + * BPF_STX ATOMIC (atomic ops) > */ > - case BPF_STX | BPF_XADD | BPF_W: /* *(u32 *)(dst + off) += src */ > + case BPF_STX | BPF_ATOMIC | BPF_W: > + if (imm != BPF_ADD) { > + pr_err_ratelimited( > + "eBPF filter atomic op code %02x (@%d) unsupported\n", code, i); > + return -ENOTSUPP; > + } > + > + /* *(u32 *)(dst + off) += src */ > + > bpf_set_seen_register(ctx, tmp_reg); > /* Get offset into TMP_REG */ > EMIT(PPC_RAW_LI(tmp_reg, off)); > @@ -789,7 +797,7 @@ int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, struct codegen_context * > PPC_BCC_SHORT(COND_NE, (ctx->idx - 3) * 4); > break; > > - case BPF_STX | BPF_XADD | BPF_DW: /* *(u64 *)(dst + off) += src */ > + case BPF_STX | BPF_ATOMIC | BPF_DW: /* *(u64 *)(dst + off) += src */ > return -EOPNOTSUPP; > > /* >
Christophe Leroy wrote: > > > Le 01/07/2021 à 17:08, Naveen N. Rao a écrit : >> Commit 91c960b0056672 ("bpf: Rename BPF_XADD and prepare to encode other >> atomics in .imm") converted BPF_XADD to BPF_ATOMIC and updated all JIT >> implementations to reject JIT'ing instructions with an immediate value >> different from BPF_ADD. However, ppc32 BPF JIT was implemented around >> the same time and didn't include the same change. Update the ppc32 JIT >> accordingly. >> >> Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> > > Shouldn't it also include a Fixes tag and stable Cc as PPC32 eBPF was added in 5.13 ? Yes, I wasn't sure which patch to actually blame. But you're right, this should have the below fixes tag since this affects the ppc32 eBPF JIT. > > Fixes: 51c66ad849a7 ("powerpc/bpf: Implement extended BPF on PPC32") > Cc: stable@vger.kernel.org Cc: stable@vger.kernel.org # v5.13 Thanks, - Naveen
diff --git a/arch/powerpc/net/bpf_jit_comp32.c b/arch/powerpc/net/bpf_jit_comp32.c index cbe5b399ed869d..91c990335a16c9 100644 --- a/arch/powerpc/net/bpf_jit_comp32.c +++ b/arch/powerpc/net/bpf_jit_comp32.c @@ -773,9 +773,17 @@ int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, struct codegen_context * break; /* - * BPF_STX XADD (atomic_add) + * BPF_STX ATOMIC (atomic ops) */ - case BPF_STX | BPF_XADD | BPF_W: /* *(u32 *)(dst + off) += src */ + case BPF_STX | BPF_ATOMIC | BPF_W: + if (imm != BPF_ADD) { + pr_err_ratelimited( + "eBPF filter atomic op code %02x (@%d) unsupported\n", code, i); + return -ENOTSUPP; + } + + /* *(u32 *)(dst + off) += src */ + bpf_set_seen_register(ctx, tmp_reg); /* Get offset into TMP_REG */ EMIT(PPC_RAW_LI(tmp_reg, off)); @@ -789,7 +797,7 @@ int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, struct codegen_context * PPC_BCC_SHORT(COND_NE, (ctx->idx - 3) * 4); break; - case BPF_STX | BPF_XADD | BPF_DW: /* *(u64 *)(dst + off) += src */ + case BPF_STX | BPF_ATOMIC | BPF_DW: /* *(u64 *)(dst + off) += src */ return -EOPNOTSUPP; /*
Commit 91c960b0056672 ("bpf: Rename BPF_XADD and prepare to encode other atomics in .imm") converted BPF_XADD to BPF_ATOMIC and updated all JIT implementations to reject JIT'ing instructions with an immediate value different from BPF_ADD. However, ppc32 BPF JIT was implemented around the same time and didn't include the same change. Update the ppc32 JIT accordingly. Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> --- arch/powerpc/net/bpf_jit_comp32.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)