lkml.org 
[lkml]   [2018]   [Jan]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 18/71] ARM: net: bpf: correct stack layout documentation
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Russell King <rmk+kernel@armlinux.org.uk>

    commit 0005e55a79cfda88199e41a406a829c88d708c67 upstream.

    The stack layout documentation incorrectly suggests that the BPF JIT
    scratch space starts immediately below BPF_FP. This is not correct,
    so let's fix the documentation to reflect reality.

    Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/arm/net/bpf_jit_32.c | 35 +++++++++++++++++++++++++++--------
    1 file changed, 27 insertions(+), 8 deletions(-)

    --- a/arch/arm/net/bpf_jit_32.c
    +++ b/arch/arm/net/bpf_jit_32.c
    @@ -28,24 +28,43 @@
    int bpf_jit_enable __read_mostly;

    /*
    - * eBPF prog stack layout
    + * eBPF prog stack layout:
    *
    * high
    - * original ARM_SP => +-----+ eBPF prologue
    - * |FP/LR|
    - * current ARM_FP => +-----+
    - * | ... | callee saved registers
    - * eBPF fp register => +-----+ <= (BPF_FP)
    + * original ARM_SP => +-----+
    + * | | callee saved registers
    + * +-----+ <= (BPF_FP + SCRATCH_SIZE)
    * | ... | eBPF JIT scratch space
    - * | | eBPF prog stack
    + * eBPF fp register => +-----+
    + * (BPF_FP) | ... | eBPF prog stack
    * +-----+
    * |RSVD | JIT scratchpad
    - * current ARM_SP => +-----+ <= (BPF_FP - STACK_SIZE)
    + * current ARM_SP => +-----+ <= (BPF_FP - STACK_SIZE + SCRATCH_SIZE)
    * | |
    * | ... | Function call stack
    * | |
    * +-----+
    * low
    + *
    + * The callee saved registers depends on whether frame pointers are enabled.
    + * With frame pointers (to be compliant with the ABI):
    + *
    + * high
    + * original ARM_SP => +------------------+ \
    + * | pc | |
    + * current ARM_FP => +------------------+ } callee saved registers
    + * |r4-r8,r10,fp,ip,lr| |
    + * +------------------+ /
    + * low
    + *
    + * Without frame pointers:
    + *
    + * high
    + * original ARM_SP => +------------------+
    + * | lr | (optional)
    + * | r4-r8,r10 | callee saved registers
    + * +------------------+
    + * low
    */

    #define STACK_OFFSET(k) (k)

    \
     
     \ /
      Last update: 2018-01-29 21:21    [W:4.385 / U:0.428 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site