Skip to content

Commit b114fce

Browse files
puranjaymohanborkmann
authored andcommitted
bpf, arm64: Fix fp initialization for exception boundary
In the ARM64 BPF JIT when prog->aux->exception_boundary is set for a BPF program, find_used_callee_regs() is not called because for a program acting as exception boundary, all callee saved registers are saved. find_used_callee_regs() sets `ctx->fp_used = true;` when it sees FP being used in any of the instructions. For programs acting as exception boundary, ctx->fp_used remains false even if frame pointer is used by the program and therefore, FP is not set-up for such programs in the prologue. This can cause the kernel to crash due to a pagefault. Fix it by setting ctx->fp_used = true for exception boundary programs as fp is always saved in such programs. Fixes: 5d4fa9e ("bpf, arm64: Avoid blindly saving/restoring all callee-saved registers") Signed-off-by: Puranjay Mohan <[email protected]> Signed-off-by: Daniel Borkmann <[email protected]> Acked-by: Xu Kuohai <[email protected]> Link: https://lore.kernel.org/bpf/[email protected]
1 parent b7b3500 commit b114fce

File tree

1 file changed

+1
-0
lines changed

1 file changed

+1
-0
lines changed

arch/arm64/net/bpf_jit_comp.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,7 @@ static void push_callee_regs(struct jit_ctx *ctx)
412412
emit(A64_PUSH(A64_R(23), A64_R(24), A64_SP), ctx);
413413
emit(A64_PUSH(A64_R(25), A64_R(26), A64_SP), ctx);
414414
emit(A64_PUSH(A64_R(27), A64_R(28), A64_SP), ctx);
415+
ctx->fp_used = true;
415416
} else {
416417
find_used_callee_regs(ctx);
417418
for (i = 0; i + 1 < ctx->nr_used_callee_reg; i += 2) {

0 commit comments

Comments
 (0)