| From stable-bounces@linux.kernel.org Tue Jan 10 13:35:08 2006 |
| Date: Tue, 10 Jan 2006 13:30:54 -0800 (PST) |
| Message-Id: <20060110.133054.07150578.davem@davemloft.net> |
| To: stable@kernel.org |
| From: "David S. Miller" <davem@davemloft.net> |
| Subject: [SPARC64]: Fix ptrace/strace |
| |
| From: Richard Mortimer <richm@oldelvet.org.uk> |
| |
| Don't clobber register %l0 while checking TI_SYS_NOERROR value in |
| syscall return path. This bug was introduced by: |
| |
| db7d9a4eb700be766cc9f29241483dbb1e748832 |
| |
| Problem narrowed down by Luis F. Ortiz and Richard Mortimer. |
| |
| I tried using %l2 as suggested by Luis and that works for me. |
| |
| Looking at the code I wonder if it makes sense to simplify the code |
| a little bit. The following works for me but I'm not sure how to |
| exercise the "NOERROR" codepath. |
| |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Chris Wright <chrisw@sous-sol.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| --- |
| arch/sparc64/kernel/entry.S | 7 ++----- |
| 1 file changed, 2 insertions(+), 5 deletions(-) |
| |
| --- linux-2.6.14.6.orig/arch/sparc64/kernel/entry.S |
| +++ linux-2.6.14.6/arch/sparc64/kernel/entry.S |
| @@ -1657,13 +1657,10 @@ ret_sys_call: |
| /* Check if force_successful_syscall_return() |
| * was invoked. |
| */ |
| - ldub [%curptr + TI_SYS_NOERROR], %l0 |
| - brz,pt %l0, 1f |
| - nop |
| - ba,pt %xcc, 80f |
| + ldub [%curptr + TI_SYS_NOERROR], %l2 |
| + brnz,a,pn %l2, 80f |
| stb %g0, [%curptr + TI_SYS_NOERROR] |
| |
| -1: |
| cmp %o0, -ERESTART_RESTARTBLOCK |
| bgeu,pn %xcc, 1f |
| andcc %l0, (_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT), %l6 |