projects
/
linux-2.6-block.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
[linux-2.6-block.git]
/
kernel
/
ptrace.c
diff --git
a/kernel/ptrace.c
b/kernel/ptrace.c
index 67e392ed5496e97c54100edaa2557e2813d6faa8..6c19e94fd0a5482786e432599a0fb4840a5c66cb 100644
(file)
--- a/
kernel/ptrace.c
+++ b/
kernel/ptrace.c
@@
-73,7
+73,7
@@
void __ptrace_unlink(struct task_struct *child)
BUG_ON(!child->ptrace);
child->ptrace = 0;
BUG_ON(!child->ptrace);
child->ptrace = 0;
- if (
!list_empty(&child->ptrace_list
)) {
+ if (
ptrace_reparented(child
)) {
list_del_init(&child->ptrace_list);
remove_parent(child);
child->parent = child->real_parent;
list_del_init(&child->ptrace_list);
remove_parent(child);
child->parent = child->real_parent;
@@
-168,8
+168,6
@@
int ptrace_attach(struct task_struct *task)
audit_ptrace(task);
retval = -EPERM;
audit_ptrace(task);
retval = -EPERM;
- if (task->pid <= 1)
- goto out;
if (same_thread_group(task, current))
goto out;
if (same_thread_group(task, current))
goto out;
@@
-208,8
+206,7
@@
repeat:
__ptrace_link(task, current);
__ptrace_link(task, current);
- force_sig_specific(SIGSTOP, task);
-
+ send_sig_info(SIGSTOP, SEND_SIG_FORCED, task);
bad:
write_unlock_irqrestore(&tasklist_lock, flags);
task_unlock(task);
bad:
write_unlock_irqrestore(&tasklist_lock, flags);
task_unlock(task);
@@
-522,12
+519,6
@@
struct task_struct *ptrace_get_task_struct(pid_t pid)
{
struct task_struct *child;
{
struct task_struct *child;
- /*
- * Tracing init is not allowed.
- */
- if (pid == 1)
- return ERR_PTR(-EPERM);
-
read_lock(&tasklist_lock);
child = find_task_by_vpid(pid);
if (child)
read_lock(&tasklist_lock);
child = find_task_by_vpid(pid);
if (child)
@@
-543,7
+534,6
@@
struct task_struct *ptrace_get_task_struct(pid_t pid)
#define arch_ptrace_attach(child) do { } while (0)
#endif
#define arch_ptrace_attach(child) do { } while (0)
#endif
-#ifndef __ARCH_SYS_PTRACE
asmlinkage long sys_ptrace(long request, long pid, long addr, long data)
{
struct task_struct *child;
asmlinkage long sys_ptrace(long request, long pid, long addr, long data)
{
struct task_struct *child;
@@
-591,7
+581,6
@@
asmlinkage long sys_ptrace(long request, long pid, long addr, long data)
unlock_kernel();
return ret;
}
unlock_kernel();
return ret;
}
-#endif /* __ARCH_SYS_PTRACE */
int generic_ptrace_peekdata(struct task_struct *tsk, long addr, long data)
{
int generic_ptrace_peekdata(struct task_struct *tsk, long addr, long data)
{
@@
-612,7
+601,7
@@
int generic_ptrace_pokedata(struct task_struct *tsk, long addr, long data)
return (copied == sizeof(data)) ? 0 : -EIO;
}
return (copied == sizeof(data)) ? 0 : -EIO;
}
-#if
def CONFIG_COMPAT
+#if
defined CONFIG_COMPAT && defined __ARCH_WANT_COMPAT_SYS_PTRACE
#include <linux/compat.h>
int compat_ptrace_request(struct task_struct *child, compat_long_t request,
#include <linux/compat.h>
int compat_ptrace_request(struct task_struct *child, compat_long_t request,
@@
-667,7
+656,6
@@
int compat_ptrace_request(struct task_struct *child, compat_long_t request,
return ret;
}
return ret;
}
-#ifdef __ARCH_WANT_COMPAT_SYS_PTRACE
asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
compat_long_t addr, compat_long_t data)
{
asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
compat_long_t addr, compat_long_t data)
{
@@
-710,6
+698,4
@@
asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
unlock_kernel();
return ret;
}
unlock_kernel();
return ret;
}
-#endif /* __ARCH_WANT_COMPAT_SYS_PTRACE */
-
-#endif /* CONFIG_COMPAT */
+#endif /* CONFIG_COMPAT && __ARCH_WANT_COMPAT_SYS_PTRACE */