[IA64] find thread for user rbs address
authorbibo,mao <bibo.mao@intel.com>
Tue, 30 Jan 2007 03:02:19 +0000 (11:02 +0800)
committerTony Luck <tony.luck@intel.com>
Mon, 5 Feb 2007 22:04:21 +0000 (14:04 -0800)
I encountered one problem when running ptrace test case the situation
is this: traced process's syscall parameter needs to be accessed, but
for sys_clone system call with clone_flag (CLONE_VFORK | CLONE_VM |
SIGCHLD) parameter.  This syscall's parameter accessing result is wrong.

The reason is that vforked child process mm point is the same, but
tgid is different. Without this patch find_thread_for_addr will return
vforked process if vforked process is also stopped, but not the thread
which calls vfork syscall.

Signed-off-by: Tony Luck <tony.luck@intel.com>
arch/ia64/kernel/ptrace.c

index f1ec129ae3a1d3d1afb5887bfe1d1e29b61c018b..3f8918782e0c992721a1758c1f83e2446f5261fe 100644 (file)
@@ -607,7 +607,7 @@ find_thread_for_addr (struct task_struct *child, unsigned long addr)
         */
        list_for_each_safe(this, next, &current->children) {
                p = list_entry(this, struct task_struct, sibling);
-               if (p->mm != mm)
+               if (p->tgid != child->tgid)
                        continue;
                if (thread_matches(p, addr)) {
                        child = p;