2006-01-13 03:22:33

by Chris Wright

[permalink] [raw]
Subject: [PATCH 12/17] [SPARC64]: Fix ptrace/strace

-stable review patch. If anyone has any objections, please let us know.
------------------

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 <[email protected]>
Signed-off-by: Chris Wright <[email protected]>
---

arch/sparc64/kernel/entry.S | 7 ++-----
1 files changed, 2 insertions(+), 5 deletions(-)

Index: linux-2.6.15.y/arch/sparc64/kernel/entry.S
===================================================================
--- linux-2.6.15.y.orig/arch/sparc64/kernel/entry.S
+++ linux-2.6.15.y/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

--