• Daniel Borkmann's avatar
    bpf, arm64: fix stack_depth tracking in combination with tail calls · a2284d91
    Daniel Borkmann authored
    Using dynamic stack_depth tracking in arm64 JIT is currently broken in
    combination with tail calls. In prologue, we cache ctx->stack_size and
    adjust SP reg for setting up function call stack, and tearing it down
    again in epilogue. Problem is that when doing a tail call, the cached
    ctx->stack_size might not be the same.
    
    One way to fix the problem with minimal overhead is to re-adjust SP in
    emit_bpf_tail_call() and properly adjust it to the current program's
    ctx->stack_size. Tested on Cavium ThunderX ARMv8.
    
    Fixes: f1c9eed7 ("bpf, arm64: take advantage of stack_depth tracking")
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    a2284d91
bpf_jit_comp.c 23.5 KB