]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
x86_64 syscall exit tracing fixup from Andi
authorChris Wright <chrisw@sous-sol.org>
Thu, 1 Jun 2006 01:33:31 +0000 (18:33 -0700)
committerChris Wright <chrisw@sous-sol.org>
Thu, 1 Jun 2006 01:33:31 +0000 (18:33 -0700)
queue-2.6.16/series
queue-2.6.16/x86_64-don-t-do-syscall-exit-tracing-twice.patch [new file with mode: 0644]

index 545b09455ebcf15e80daa1dbc48b63fff933ff5e..4d11f64e3ae07b6b1d246d0a166ad7810ad10a4b 100644 (file)
@@ -7,4 +7,5 @@ ohci1394-sbp2-fix-scsi_add_device-failed-with-pl-3507-based-devices.patch
 the-latest-consensus-libata-resume-fix.patch
 ipw2200-Filter-unsupported-channels-out-in-ad-hoc-mode.patch
 x86_64-add-crashdump-trigger-points.patch
+x86_64-don-t-do-syscall-exit-tracing-twice.patch
 x86_64-Don-t-sanity-check-Type-1-PCI-bus-access-on-newer-systems.patch
diff --git a/queue-2.6.16/x86_64-don-t-do-syscall-exit-tracing-twice.patch b/queue-2.6.16/x86_64-don-t-do-syscall-exit-tracing-twice.patch
new file mode 100644 (file)
index 0000000..e3a0e55
--- /dev/null
@@ -0,0 +1,38 @@
+From stable-bounces@linux.kernel.org  Wed May 31 18:30:38 2006
+Date: Thu, 1 Jun 2006 03:26:58 +0200
+From: Andi Kleen <ak@suse.de>
+To: stable@kernel.org
+Cc: 
+Subject: x86_64: Don't do syscall exit tracing twice
+
+This fixes a regression from the earlier DOS fix for non canonical
+IRET addresses. It broke UML.
+
+int_ret_from_syscall already does syscall exit tracing, so 
+no need to do it again in the caller.
+
+This caused problems for UML and some other special programs doing
+syscall interception.
+
+Signed-off-by: Andi Kleen <ak@suse.de>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+ arch/x86_64/kernel/entry.S |    7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+--- linux-2.6.16.19.orig/arch/x86_64/kernel/entry.S
++++ linux-2.6.16.19/arch/x86_64/kernel/entry.S
+@@ -281,12 +281,7 @@ tracesys:                  
+       ja  1f
+       movq %r10,%rcx  /* fixup for C */
+       call *sys_call_table(,%rax,8)
+-      movq %rax,RAX-ARGOFFSET(%rsp)
+-1:    SAVE_REST
+-      movq %rsp,%rdi
+-      call syscall_trace_leave
+-      RESTORE_TOP_OF_STACK %rbx
+-      RESTORE_REST
++1:    movq %rax,RAX-ARGOFFSET(%rsp)
+       /* Use IRET because user could have changed frame */
+       jmp int_ret_from_sys_call
+       CFI_ENDPROC