[PATCH 01/51] ARM: Thumb-2: Fix exception return sequence to restore stack correctly
Nicolas Pitre
nico at fluxnic.net
Mon Jul 11 14:07:05 EDT 2011
On Sat, 9 Jul 2011, Tixy wrote:
> From: Jon Medhurst <tixy at yxit.co.uk>
>
> The implementation of svc_exit didn't take into account any stack hole
> created by svc_entry; as happens with the undef handler when kprobes are
> configured. The fix is to read the saved value of SP rather than trying
> to calculate it.
>
> Signed-off-by: Jon Medhurst <tixy at yxit.co.uk>
Reviewed-by: Nicolas Pitre <nicolas.pitre at linaro.org>
> ---
> arch/arm/kernel/entry-header.S | 12 +++++-------
> 1 files changed, 5 insertions(+), 7 deletions(-)
>
> diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S
> index 051166c..83e29ad 100644
> --- a/arch/arm/kernel/entry-header.S
> +++ b/arch/arm/kernel/entry-header.S
> @@ -121,15 +121,13 @@
> .endm
> #else /* CONFIG_THUMB2_KERNEL */
> .macro svc_exit, rpsr
> + ldr lr, [sp, #S_SP] @ top of the stack
> + ldrd r0, r1, [sp, #S_LR] @ calling lr and pc
> clrex @ clear the exclusive monitor
> - ldr r0, [sp, #S_SP] @ top of the stack
> - ldr r1, [sp, #S_PC] @ return address
> - tst r0, #4 @ orig stack 8-byte aligned?
> - stmdb r0, {r1, \rpsr} @ rfe context
> + stmdb lr!, {r0, r1, \rpsr} @ calling lr and rfe context
> ldmia sp, {r0 - r12}
> - ldr lr, [sp, #S_LR]
> - addeq sp, sp, #S_FRAME_SIZE - 8 @ aligned
> - addne sp, sp, #S_FRAME_SIZE - 4 @ not aligned
> + mov sp, lr
> + ldr lr, [sp], #4
> rfeia sp!
> .endm
>
> --
> 1.7.2.5
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
More information about the linux-arm-kernel
mailing list