diff options
Diffstat (limited to 'kernel/signal.c')
-rw-r--r-- | kernel/signal.c | 41 |
1 files changed, 9 insertions, 32 deletions
diff --git a/kernel/signal.c b/kernel/signal.c index 228fdb5c01d1..8072e568bbe0 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
@@ -1096,26 +1096,6 @@ int kill_pgrp_info(int sig, struct siginfo *info, struct pid *pgrp) | |||
1096 | return retval; | 1096 | return retval; |
1097 | } | 1097 | } |
1098 | 1098 | ||
1099 | int __kill_pg_info(int sig, struct siginfo *info, pid_t pgrp) | ||
1100 | { | ||
1101 | if (pgrp <= 0) | ||
1102 | return -EINVAL; | ||
1103 | |||
1104 | return __kill_pgrp_info(sig, info, find_pid(pgrp)); | ||
1105 | } | ||
1106 | |||
1107 | int | ||
1108 | kill_pg_info(int sig, struct siginfo *info, pid_t pgrp) | ||
1109 | { | ||
1110 | int retval; | ||
1111 | |||
1112 | read_lock(&tasklist_lock); | ||
1113 | retval = __kill_pg_info(sig, info, pgrp); | ||
1114 | read_unlock(&tasklist_lock); | ||
1115 | |||
1116 | return retval; | ||
1117 | } | ||
1118 | |||
1119 | int kill_pid_info(int sig, struct siginfo *info, struct pid *pid) | 1099 | int kill_pid_info(int sig, struct siginfo *info, struct pid *pid) |
1120 | { | 1100 | { |
1121 | int error; | 1101 | int error; |
@@ -1191,8 +1171,10 @@ EXPORT_SYMBOL_GPL(kill_pid_info_as_uid); | |||
1191 | 1171 | ||
1192 | static int kill_something_info(int sig, struct siginfo *info, int pid) | 1172 | static int kill_something_info(int sig, struct siginfo *info, int pid) |
1193 | { | 1173 | { |
1174 | int ret; | ||
1175 | rcu_read_lock(); | ||
1194 | if (!pid) { | 1176 | if (!pid) { |
1195 | return kill_pg_info(sig, info, process_group(current)); | 1177 | ret = kill_pgrp_info(sig, info, task_pgrp(current)); |
1196 | } else if (pid == -1) { | 1178 | } else if (pid == -1) { |
1197 | int retval = 0, count = 0; | 1179 | int retval = 0, count = 0; |
1198 | struct task_struct * p; | 1180 | struct task_struct * p; |
@@ -1207,12 +1189,14 @@ static int kill_something_info(int sig, struct siginfo *info, int pid) | |||
1207 | } | 1189 | } |
1208 | } | 1190 | } |
1209 | read_unlock(&tasklist_lock); | 1191 | read_unlock(&tasklist_lock); |
1210 | return count ? retval : -ESRCH; | 1192 | ret = count ? retval : -ESRCH; |
1211 | } else if (pid < 0) { | 1193 | } else if (pid < 0) { |
1212 | return kill_pg_info(sig, info, -pid); | 1194 | ret = kill_pgrp_info(sig, info, find_pid(-pid)); |
1213 | } else { | 1195 | } else { |
1214 | return kill_proc_info(sig, info, pid); | 1196 | ret = kill_pid_info(sig, info, find_pid(pid)); |
1215 | } | 1197 | } |
1198 | rcu_read_unlock(); | ||
1199 | return ret; | ||
1216 | } | 1200 | } |
1217 | 1201 | ||
1218 | /* | 1202 | /* |
@@ -1311,12 +1295,6 @@ int kill_pid(struct pid *pid, int sig, int priv) | |||
1311 | EXPORT_SYMBOL(kill_pid); | 1295 | EXPORT_SYMBOL(kill_pid); |
1312 | 1296 | ||
1313 | int | 1297 | int |
1314 | kill_pg(pid_t pgrp, int sig, int priv) | ||
1315 | { | ||
1316 | return kill_pg_info(sig, __si_special(priv), pgrp); | ||
1317 | } | ||
1318 | |||
1319 | int | ||
1320 | kill_proc(pid_t pid, int sig, int priv) | 1298 | kill_proc(pid_t pid, int sig, int priv) |
1321 | { | 1299 | { |
1322 | return kill_proc_info(sig, __si_special(priv), pid); | 1300 | return kill_proc_info(sig, __si_special(priv), pid); |
@@ -1905,7 +1883,7 @@ relock: | |||
1905 | 1883 | ||
1906 | /* signals can be posted during this window */ | 1884 | /* signals can be posted during this window */ |
1907 | 1885 | ||
1908 | if (is_orphaned_pgrp(process_group(current))) | 1886 | if (is_current_pgrp_orphaned()) |
1909 | goto relock; | 1887 | goto relock; |
1910 | 1888 | ||
1911 | spin_lock_irq(¤t->sighand->siglock); | 1889 | spin_lock_irq(¤t->sighand->siglock); |
@@ -1955,7 +1933,6 @@ EXPORT_SYMBOL(recalc_sigpending); | |||
1955 | EXPORT_SYMBOL_GPL(dequeue_signal); | 1933 | EXPORT_SYMBOL_GPL(dequeue_signal); |
1956 | EXPORT_SYMBOL(flush_signals); | 1934 | EXPORT_SYMBOL(flush_signals); |
1957 | EXPORT_SYMBOL(force_sig); | 1935 | EXPORT_SYMBOL(force_sig); |
1958 | EXPORT_SYMBOL(kill_pg); | ||
1959 | EXPORT_SYMBOL(kill_proc); | 1936 | EXPORT_SYMBOL(kill_proc); |
1960 | EXPORT_SYMBOL(ptrace_notify); | 1937 | EXPORT_SYMBOL(ptrace_notify); |
1961 | EXPORT_SYMBOL(send_sig); | 1938 | EXPORT_SYMBOL(send_sig); |