File linux-2.6-xen-utrace.patch of Package kernel
diff -urNp linux-2.6.17.previous/arch/i386/kernel/entry-xen.S linux-2.6.17.noarch/arch/i386/kernel/entry-xen.S
--- linux-2.6.17.previous/arch/i386/kernel/entry-xen.S 2006-07-19 16:27:09.000000000 +0200
+++ linux-2.6.17.noarch/arch/i386/kernel/entry-xen.S 2006-07-19 17:48:25.000000000 +0200
@@ -340,7 +340,7 @@ sysenter_past_esp:
GET_THREAD_INFO(%ebp)
/* Note, _TIF_SECCOMP is bit number 8, and so it needs testw and not testb */
- testw $(_TIF_SYSCALL_EMU|_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
+ testw $(_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
jnz syscall_trace_entry
cmpl $(nr_syscalls), %eax
jae syscall_badsys
@@ -389,7 +389,7 @@ ENTRY(system_call)
no_singlestep:
# system call tracing in operation / emulation
/* Note, _TIF_SECCOMP is bit number 8, and so it needs testw and not testb */
- testw $(_TIF_SYSCALL_EMU|_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
+ testw $(_TIF_SYSCALL_TRACE|_TIF_SECCOMP|_TIF_SYSCALL_AUDIT),TI_flags(%ebp)
jnz syscall_trace_entry
cmpl $(nr_syscalls), %eax
jae syscall_badsys
@@ -539,9 +539,6 @@ syscall_trace_entry:
movl %esp, %eax
xorl %edx,%edx
call do_syscall_trace
- cmpl $0, %eax
- jne resume_userspace # ret != 0 -> running under PTRACE_SYSEMU,
- # so must skip actual syscall
movl ORIG_EAX(%esp), %eax
cmpl $(nr_syscalls), %eax
jnae syscall_call
diff -urNp linux-2.6.17.previous/arch/i386/kernel/process-xen.c linux-2.6.17.noarch/arch/i386/kernel/process-xen.c
--- linux-2.6.17.previous/arch/i386/kernel/process-xen.c 2006-07-19 16:27:11.000000000 +0200
+++ linux-2.6.17.noarch/arch/i386/kernel/process-xen.c 2006-07-19 17:46:21.000000000 +0200
@@ -657,9 +657,6 @@ asmlinkage int sys_execve(struct pt_regs
(char __user * __user *) regs.edx,
®s);
if (error == 0) {
- task_lock(current);
- current->ptrace &= ~PT_DTRACE;
- task_unlock(current);
/* Make sure we don't return using sysenter.. */
set_thread_flag(TIF_IRET);
}
diff -urNp linux-2.6.17.previous/arch/x86_64/ia32/ia32entry-xen.S linux-2.6.17.noarch/arch/x86_64/ia32/ia32entry-xen.S
--- linux-2.6.17.previous/arch/x86_64/ia32/ia32entry-xen.S 2006-07-19 16:27:10.000000000 +0200
+++ linux-2.6.17.noarch/arch/x86_64/ia32/ia32entry-xen.S 2006-07-19 17:53:16.000000000 +0200
@@ -444,7 +444,7 @@ ia32_sys_call_table:
.quad sys_setuid16
.quad sys_getuid16
.quad compat_sys_stime /* stime */ /* 25 */
- .quad sys32_ptrace /* ptrace */
+ .quad compat_sys_ptrace /* ptrace */
.quad sys_alarm
.quad sys_fstat /* (old)fstat */
.quad sys_pause
diff -urNp linux-2.6.17.previous/arch/x86_64/kernel/process-xen.c linux-2.6.17.noarch/arch/x86_64/kernel/process-xen.c
--- linux-2.6.17.previous/arch/x86_64/kernel/process-xen.c 2006-07-19 16:27:11.000000000 +0200
+++ linux-2.6.17.noarch/arch/x86_64/kernel/process-xen.c 2006-07-19 17:52:39.000000000 +0200
@@ -580,11 +580,6 @@ long sys_execve(char __user *name, char
if (IS_ERR(filename))
return error;
error = do_execve(filename, argv, envp, ®s);
- if (error == 0) {
- task_lock(current);
- current->ptrace &= ~PT_DTRACE;
- task_unlock(current);
- }
putname(filename);
return error;
}
diff -urNp linux-2.6.17.previous/arch/x86_64/kernel/traps-xen.c linux-2.6.17.noarch/arch/x86_64/kernel/traps-xen.c
--- linux-2.6.17.previous/arch/x86_64/kernel/traps-xen.c 2006-07-19 16:27:10.000000000 +0200
+++ linux-2.6.17.noarch/arch/x86_64/kernel/traps-xen.c 2006-07-19 17:51:56.000000000 +0200
@@ -863,14 +863,6 @@ asmlinkage void __kprobes do_debug(struc
*/
if (!user_mode(regs))
goto clear_TF_reenable;
- /*
- * Was the TF flag set by a debugger? If so, clear it now,
- * so that register information is correct.
- */
- if (tsk->ptrace & PT_DTRACE) {
- regs->eflags &= ~TF_MASK;
- tsk->ptrace &= ~PT_DTRACE;
- }
}
/* Ok, finally something we can handle */
diff -urNp linux-2.6.17.previous/arch/x86_64/mm/fault-xen.c linux-2.6.17.noarch/arch/x86_64/mm/fault-xen.c
--- linux-2.6.17.previous/arch/x86_64/mm/fault-xen.c 2006-07-19 16:27:11.000000000 +0200
+++ linux-2.6.17.noarch/arch/x86_64/mm/fault-xen.c 2006-07-19 18:01:52.000000000 +0200
@@ -11,7 +11,7 @@
#include <linux/errno.h>
#include <linux/string.h>
#include <linux/types.h>
-#include <linux/ptrace.h>
+#include <linux/tracehook.h>
#include <linux/mman.h>
#include <linux/mm.h>
#include <linux/smp.h>
@@ -250,7 +250,7 @@ int unhandled_signal(struct task_struct
{
if (tsk->pid == 1)
return 1;
- if (tsk->ptrace & PT_PTRACED)
+ if (tracehook_consider_fatal_signal(tsk, sig))
return 0;
return (tsk->sighand->action[sig-1].sa.sa_handler == SIG_IGN) ||
(tsk->sighand->action[sig-1].sa.sa_handler == SIG_DFL);