[PATCH] arm: clone: restore stack pointer just after return from syscall
Carmelo AMOROSO
carmelo.amoroso at st.com
Tue Dec 11 15:39:34 UTC 2012
On 11/12/2012 16.32, Filippo ARCIDIACONO wrote:
> If the syscall returns with an error the stack pointer and r4 register
> are not restored because the instruction 'ldmnefd sp!, {r4}' is executed
> after branching to '__error' label.
> This bug has been spotted out by running './utstest clone 5' from LTP
> built with -fstack-protector-all compiler flag as log below:
>
> root at cortex-a9:/usr/tests/ltp/testcases/bin# ./utstest clone 5
> stack smashing detected: ./utstest terminated()
>
> Regression introduced by commit e58798e107d652644629a1daaa95d76430808d53
>
> Signed-off-by: Filippo Arcidiacono <filippo.arcidiacono at st.com>
> Signed-off-by: Giuseppe Di Giore <giuseppe.di-giore at st.com>
> ---
> libc/sysdeps/linux/arm/clone.S | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/libc/sysdeps/linux/arm/clone.S b/libc/sysdeps/linux/arm/clone.S
> index fdc05b8..e4101ba 100644
> --- a/libc/sysdeps/linux/arm/clone.S
> +++ b/libc/sysdeps/linux/arm/clone.S
> @@ -111,8 +111,8 @@ __clone:
> ldr r4, [sp, #12]
> DO_CALL (clone)
> movs a1, a1
> - blt __error
> ldmnefd sp!, {r4}
> + blt __error
> IT(t, ne)
> #if defined(__USE_BX__)
> bxne lr
>
sneaky bug. well spotted.
Applied, thanks.
Carmelo
More information about the uClibc
mailing list