| From 8bbc9d822421d9ac8ff9ed26a3713c9afc69d6c8 Mon Sep 17 00:00:00 2001 |
| From: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com> |
| Date: Wed, 6 Oct 2021 01:55:22 +0530 |
| Subject: powerpc/bpf: Fix BPF_MOD when imm == 1 |
| |
| From: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> |
| |
| commit 8bbc9d822421d9ac8ff9ed26a3713c9afc69d6c8 upstream. |
| |
| Only ignore the operation if dividing by 1. |
| |
| Fixes: 156d0e290e969c ("powerpc/ebpf/jit: Implement JIT compiler for extended BPF") |
| Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> |
| Tested-by: Johan Almbladh <johan.almbladh@anyfinetworks.com> |
| Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu> |
| Acked-by: Song Liu <songliubraving@fb.com> |
| Acked-by: Johan Almbladh <johan.almbladh@anyfinetworks.com> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Link: https://lore.kernel.org/r/c674ca18c3046885602caebb326213731c675d06.1633464148.git.naveen.n.rao@linux.vnet.ibm.com |
| [cascardo: use PPC_LI instead of EMIT(PPC_RAW_LI)] |
| Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/powerpc/net/bpf_jit_comp64.c | 10 ++++++++-- |
| 1 file changed, 8 insertions(+), 2 deletions(-) |
| |
| --- a/arch/powerpc/net/bpf_jit_comp64.c |
| +++ b/arch/powerpc/net/bpf_jit_comp64.c |
| @@ -430,8 +430,14 @@ static int bpf_jit_build_body(struct bpf |
| case BPF_ALU64 | BPF_DIV | BPF_K: /* dst /= imm */ |
| if (imm == 0) |
| return -EINVAL; |
| - else if (imm == 1) |
| - goto bpf_alu32_trunc; |
| + if (imm == 1) { |
| + if (BPF_OP(code) == BPF_DIV) { |
| + goto bpf_alu32_trunc; |
| + } else { |
| + PPC_LI(dst_reg, 0); |
| + break; |
| + } |
| + } |
| |
| PPC_LI32(b2p[TMP_REG_1], imm); |
| switch (BPF_CLASS(code)) { |