Commit d1220efd authored by Russell King's avatar Russell King

ARM: net: bpf: fix stack alignment

As per 2dede2d8 ("ARM EABI: stack pointer must be 64-bit aligned
after a CPU exception") the stack should be aligned to a 64-bit boundary
on EABI systems.  Ensure that the eBPF JIT appropraitely aligns the
stack.

Fixes: 39c13c20 ("arm: eBPF JIT compiler")
Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
parent f4483f2c
...@@ -179,8 +179,13 @@ static void jit_fill_hole(void *area, unsigned int size) ...@@ -179,8 +179,13 @@ static void jit_fill_hole(void *area, unsigned int size)
*ptr++ = __opcode_to_mem_arm(ARM_INST_UDF); *ptr++ = __opcode_to_mem_arm(ARM_INST_UDF);
} }
/* Stack must be multiples of 16 Bytes */ #if defined(CONFIG_AEABI) && (__LINUX_ARM_ARCH__ >= 5)
#define STACK_ALIGN(sz) (((sz) + 3) & ~3) /* EABI requires the stack to be aligned to 64-bit boundaries */
#define STACK_ALIGNMENT 8
#else
/* Stack must be aligned to 32-bit boundaries */
#define STACK_ALIGNMENT 4
#endif
/* Stack space for BPF_REG_2, BPF_REG_3, BPF_REG_4, /* Stack space for BPF_REG_2, BPF_REG_3, BPF_REG_4,
* BPF_REG_5, BPF_REG_7, BPF_REG_8, BPF_REG_9, * BPF_REG_5, BPF_REG_7, BPF_REG_8, BPF_REG_9,
...@@ -194,7 +199,7 @@ static void jit_fill_hole(void *area, unsigned int size) ...@@ -194,7 +199,7 @@ static void jit_fill_hole(void *area, unsigned int size)
+ SCRATCH_SIZE + \ + SCRATCH_SIZE + \
+ 4 /* extra for skb_copy_bits buffer */) + 4 /* extra for skb_copy_bits buffer */)
#define STACK_SIZE STACK_ALIGN(_STACK_SIZE) #define STACK_SIZE ALIGN(_STACK_SIZE, STACK_ALIGNMENT)
/* Get the offset of eBPF REGISTERs stored on scratch space. */ /* Get the offset of eBPF REGISTERs stored on scratch space. */
#define STACK_VAR(off) (STACK_SIZE-off-4) #define STACK_VAR(off) (STACK_SIZE-off-4)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment