powerpc/bpf: Fix BPF_MOD when imm == 1
commit 8bbc9d822421d9ac8ff9ed26a3713c9afc69d6c8 upstream.
Only ignore the operation if dividing by 1.
Fixes: 156d0e290e
("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
Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
3f2c12ec8a
commit
e184a21b5c
@ -415,8 +415,14 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image,
|
|||||||
case BPF_ALU64 | BPF_DIV | BPF_K: /* dst /= imm */
|
case BPF_ALU64 | BPF_DIV | BPF_K: /* dst /= imm */
|
||||||
if (imm == 0)
|
if (imm == 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
else if (imm == 1)
|
if (imm == 1) {
|
||||||
|
if (BPF_OP(code) == BPF_DIV) {
|
||||||
goto bpf_alu32_trunc;
|
goto bpf_alu32_trunc;
|
||||||
|
} else {
|
||||||
|
EMIT(PPC_RAW_LI(dst_reg, 0));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PPC_LI32(b2p[TMP_REG_1], imm);
|
PPC_LI32(b2p[TMP_REG_1], imm);
|
||||||
switch (BPF_CLASS(code)) {
|
switch (BPF_CLASS(code)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user