powerpc32/bpf: Fix codegen for bpf-to-bpf calls
authorNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Thu, 6 Jan 2022 11:45:06 +0000 (17:15 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Sat, 15 Jan 2022 01:21:24 +0000 (12:21 +1100)
Pad instructions emitted for BPF_CALL so that the number of instructions
generated does not change for different function addresses. This is
especially important for calls to other bpf functions, whose address
will only be known during extra pass.

Fixes: 51c66ad849a703 ("powerpc/bpf: Implement extended BPF on PPC32")
Cc: stable@vger.kernel.org # v5.13+
Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/52d8fe51f7620a6f27f377791564d79d75463576.1641468127.git.naveen.n.rao@linux.vnet.ibm.com
arch/powerpc/net/bpf_jit_comp32.c

index faaebd446cadf2b4cc0c7fcce8167f4890965d87..c20b49bf8f5b5628c47f8524243afa6ecd3d9ec7 100644 (file)
@@ -191,6 +191,9 @@ void bpf_jit_emit_func_call_rel(u32 *image, struct codegen_context *ctx, u64 fun
 
        if (image && rel < 0x2000000 && rel >= -0x2000000) {
                PPC_BL_ABS(func);
+               EMIT(PPC_RAW_NOP());
+               EMIT(PPC_RAW_NOP());
+               EMIT(PPC_RAW_NOP());
        } else {
                /* Load function address into r0 */
                EMIT(PPC_RAW_LIS(_R0, IMM_H(func)));