OSDN Git Service

arm: clone: restore stack pointer just after return from syscall
authorFilippo Arcidiacono <filippo.arcidiacono@st.com>
Mon, 10 Dec 2012 08:50:52 +0000 (09:50 +0100)
committerCarmelo Amoroso <carmelo.amoroso@st.com>
Tue, 11 Dec 2012 15:39:22 +0000 (16:39 +0100)
commit495c425c3b10fd9e277995fa2a379ba4a62f78bf
treef18e2ec5840617a372dfb9597d982447579c46b4
parentf4b1b7ade7971141aa3bf731894053696b0ca4e9
arm: clone: restore stack pointer just after return from syscall

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@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@st.com>
Signed-off-by: Giuseppe Di Giore <giuseppe.di-giore@st.com>
Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
libc/sysdeps/linux/arm/clone.S