1. 30 Apr, 2020 1 commit
    • Luke Nelson's avatar
      bpf, riscv: Fix stack layout of JITed code on RV32 · 91f65858
      Luke Nelson authored
      This patch fixes issues with stackframe unwinding and alignment in the
      current stack layout for BPF programs on RV32.
      
      In the current layout, RV32 fp points to the JIT scratch registers, rather
      than to the callee-saved registers. This breaks stackframe unwinding,
      which expects fp to point just above the saved ra and fp registers.
      
      This patch fixes the issue by moving the callee-saved registers to be
      stored on the top of the stack, pointed to by fp. This satisfies the
      assumptions of stackframe unwinding.
      
      This patch also fixes an issue with the old layout that the stack was
      not aligned to 16 bytes.
      
      Stacktrace from JITed code using the old stack layout:
      
        [   12.196249 ] [<c0402200>] walk_stackframe+0x0/0x96
      
      Stacktrace using the new stack layout:
      
        [   13.062888 ] [<c0402200>] walk_stackframe+0x0/0x96
        [   13.063028 ] [<c04023c6>] show_stack+0x28/0x32
        [   13.063253 ] [<a403e778>] bpf_prog_82b916b2dfa00464+0x80/0x908
        [   13.063417 ] [<c09270b2>] bpf_test_run+0x124/0x39a
        [   13.063553 ] [<c09276c0>] bpf_prog_test_run_skb+0x234/0x448
        [   13.063704 ] [<c048510e>] __do_sys_bpf+0x766/0x13b4
        [   13.063840 ] [<c0485d82>] sys_bpf+0xc/0x14
        [   13.063961 ] [<c04010f0>] ret_from_syscall+0x0/0x2
      
      The new code is also simpler to understand and includes an ASCII diagram
      of the stack layout.
      
      Tested on riscv32 QEMU virt machine.
      Signed-off-by: default avatarLuke Nelson <luke.r.nels@gmail.com>
      Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
      Acked-by: default avatarXi Wang <xi.wang@gmail.com>
      Link: https://lore.kernel.org/bpf/20200430005127.2205-1-luke.r.nels@gmail.com
      91f65858
  2. 29 Apr, 2020 34 commits
  3. 28 Apr, 2020 4 commits
  4. 27 Apr, 2020 1 commit