From: Chris Wright Date: Thu, 1 Jun 2006 01:33:31 +0000 (-0700) Subject: x86_64 syscall exit tracing fixup from Andi X-Git-Tag: v2.6.16.20~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4bbd2ce34ba81db310662345a69a787a5eb40d7f;p=thirdparty%2Fkernel%2Fstable-queue.git x86_64 syscall exit tracing fixup from Andi --- diff --git a/queue-2.6.16/series b/queue-2.6.16/series index 545b09455eb..4d11f64e3ae 100644 --- a/queue-2.6.16/series +++ b/queue-2.6.16/series @@ -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 index 00000000000..e3a0e5570c0 --- /dev/null +++ b/queue-2.6.16/x86_64-don-t-do-syscall-exit-tracing-twice.patch @@ -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 +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 +Signed-off-by: Chris Wright +--- + 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