diff options
author | Oleg Nesterov <oleg@redhat.com> | 2011-06-24 11:34:23 -0400 |
---|---|---|
committer | Oleg Nesterov <oleg@redhat.com> | 2011-06-27 14:30:10 -0400 |
commit | bb3696da89743d580f869142d0a6e6ba9b7fe89a (patch) | |
tree | fb961c4164198742024ed8924a8824699a3065f1 /kernel/signal.c | |
parent | 0347e17739095c58c0194fed6a61aced3536d258 (diff) |
ptrace: kill real_parent_is_ptracer() in in favor of ptrace_reparented()
Kill real_parent_is_ptracer() and update the callers to use
ptrace_reparented(), after the previous patch they do the same.
Remove the unnecessary ->ptrace != 0 check in get_signal_to_deliver(),
if ptrace_reparented() == T then the task must be ptraced.
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Acked-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'kernel/signal.c')
-rw-r--r-- | kernel/signal.c | 20 |
1 files changed, 4 insertions, 16 deletions
diff --git a/kernel/signal.c b/kernel/signal.c index 4c4ad34caf77..0a1bf2c8bdcd 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
@@ -1760,15 +1760,6 @@ static int sigkill_pending(struct task_struct *tsk) | |||
1760 | } | 1760 | } |
1761 | 1761 | ||
1762 | /* | 1762 | /* |
1763 | * Test whether the target task of the usual cldstop notification - the | ||
1764 | * real_parent of @child - is in the same group as the ptracer. | ||
1765 | */ | ||
1766 | static bool real_parent_is_ptracer(struct task_struct *child) | ||
1767 | { | ||
1768 | return same_thread_group(child->parent, child->real_parent); | ||
1769 | } | ||
1770 | |||
1771 | /* | ||
1772 | * This must be called with current->sighand->siglock held. | 1763 | * This must be called with current->sighand->siglock held. |
1773 | * | 1764 | * |
1774 | * This should be the path for all ptrace stops. | 1765 | * This should be the path for all ptrace stops. |
@@ -1848,7 +1839,7 @@ static void ptrace_stop(int exit_code, int why, int clear_code, siginfo_t *info) | |||
1848 | * separately unless they're gonna be duplicates. | 1839 | * separately unless they're gonna be duplicates. |
1849 | */ | 1840 | */ |
1850 | do_notify_parent_cldstop(current, true, why); | 1841 | do_notify_parent_cldstop(current, true, why); |
1851 | if (gstop_done && !real_parent_is_ptracer(current)) | 1842 | if (gstop_done && ptrace_reparented(current)) |
1852 | do_notify_parent_cldstop(current, false, why); | 1843 | do_notify_parent_cldstop(current, false, why); |
1853 | 1844 | ||
1854 | /* | 1845 | /* |
@@ -2154,7 +2145,6 @@ relock: | |||
2154 | * the CLD_ si_code into SIGNAL_CLD_MASK bits. | 2145 | * the CLD_ si_code into SIGNAL_CLD_MASK bits. |
2155 | */ | 2146 | */ |
2156 | if (unlikely(signal->flags & SIGNAL_CLD_MASK)) { | 2147 | if (unlikely(signal->flags & SIGNAL_CLD_MASK)) { |
2157 | struct task_struct *leader; | ||
2158 | int why; | 2148 | int why; |
2159 | 2149 | ||
2160 | if (signal->flags & SIGNAL_CLD_CONTINUED) | 2150 | if (signal->flags & SIGNAL_CLD_CONTINUED) |
@@ -2175,13 +2165,11 @@ relock: | |||
2175 | * a duplicate. | 2165 | * a duplicate. |
2176 | */ | 2166 | */ |
2177 | read_lock(&tasklist_lock); | 2167 | read_lock(&tasklist_lock); |
2178 | |||
2179 | do_notify_parent_cldstop(current, false, why); | 2168 | do_notify_parent_cldstop(current, false, why); |
2180 | 2169 | ||
2181 | leader = current->group_leader; | 2170 | if (ptrace_reparented(current->group_leader)) |
2182 | if (leader->ptrace && !real_parent_is_ptracer(leader)) | 2171 | do_notify_parent_cldstop(current->group_leader, |
2183 | do_notify_parent_cldstop(leader, true, why); | 2172 | true, why); |
2184 | |||
2185 | read_unlock(&tasklist_lock); | 2173 | read_unlock(&tasklist_lock); |
2186 | 2174 | ||
2187 | goto relock; | 2175 | goto relock; |