提交 01024980 编写于 作者: E Eric W. Biederman

signal: Pass pid type into group_send_sig_info

This passes the information we already have at the call sight
into group_send_sig_info.  Ultimatelly allowing for to better handle
signals sent to a group of processes.
Signed-off-by: N"Eric W. Biederman" <ebiederm@xmission.com>
上级 24122c7f
...@@ -254,11 +254,13 @@ static inline int valid_signal(unsigned long sig) ...@@ -254,11 +254,13 @@ static inline int valid_signal(unsigned long sig)
struct timespec; struct timespec;
struct pt_regs; struct pt_regs;
enum pid_type;
extern int next_signal(struct sigpending *pending, sigset_t *mask); extern int next_signal(struct sigpending *pending, sigset_t *mask);
extern int do_send_sig_info(int sig, struct siginfo *info, extern int do_send_sig_info(int sig, struct siginfo *info,
struct task_struct *p, bool group); struct task_struct *p, bool group);
extern int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p); extern int group_send_sig_info(int sig, struct siginfo *info,
struct task_struct *p, enum pid_type type);
extern int __group_send_sig_info(int, struct siginfo *, struct task_struct *); extern int __group_send_sig_info(int, struct siginfo *, struct task_struct *);
extern int sigprocmask(int, sigset_t *, sigset_t *); extern int sigprocmask(int, sigset_t *, sigset_t *);
extern void set_current_blocked(sigset_t *); extern void set_current_blocked(sigset_t *);
......
...@@ -681,7 +681,8 @@ static void forget_original_parent(struct task_struct *father, ...@@ -681,7 +681,8 @@ static void forget_original_parent(struct task_struct *father,
t->parent = t->real_parent; t->parent = t->real_parent;
if (t->pdeath_signal) if (t->pdeath_signal)
group_send_sig_info(t->pdeath_signal, group_send_sig_info(t->pdeath_signal,
SEND_SIG_NOINFO, t); SEND_SIG_NOINFO, t,
PIDTYPE_TGID);
} }
/* /*
* If this is a threaded reparent there is no need to * If this is a threaded reparent there is no need to
......
...@@ -1274,7 +1274,8 @@ struct sighand_struct *__lock_task_sighand(struct task_struct *tsk, ...@@ -1274,7 +1274,8 @@ struct sighand_struct *__lock_task_sighand(struct task_struct *tsk,
/* /*
* send signal info to all the members of a group * send signal info to all the members of a group
*/ */
int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p) int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p,
enum pid_type type)
{ {
int ret; int ret;
...@@ -1301,7 +1302,7 @@ int __kill_pgrp_info(int sig, struct siginfo *info, struct pid *pgrp) ...@@ -1301,7 +1302,7 @@ int __kill_pgrp_info(int sig, struct siginfo *info, struct pid *pgrp)
success = 0; success = 0;
retval = -ESRCH; retval = -ESRCH;
do_each_pid_task(pgrp, PIDTYPE_PGID, p) { do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
int err = group_send_sig_info(sig, info, p); int err = group_send_sig_info(sig, info, p, PIDTYPE_PGID);
success |= !err; success |= !err;
retval = err; retval = err;
} while_each_pid_task(pgrp, PIDTYPE_PGID, p); } while_each_pid_task(pgrp, PIDTYPE_PGID, p);
...@@ -1317,7 +1318,7 @@ int kill_pid_info(int sig, struct siginfo *info, struct pid *pid) ...@@ -1317,7 +1318,7 @@ int kill_pid_info(int sig, struct siginfo *info, struct pid *pid)
rcu_read_lock(); rcu_read_lock();
p = pid_task(pid, PIDTYPE_PID); p = pid_task(pid, PIDTYPE_PID);
if (p) if (p)
error = group_send_sig_info(sig, info, p); error = group_send_sig_info(sig, info, p, PIDTYPE_TGID);
rcu_read_unlock(); rcu_read_unlock();
if (likely(!p || error != -ESRCH)) if (likely(!p || error != -ESRCH))
return error; return error;
...@@ -1420,7 +1421,8 @@ static int kill_something_info(int sig, struct siginfo *info, pid_t pid) ...@@ -1420,7 +1421,8 @@ static int kill_something_info(int sig, struct siginfo *info, pid_t pid)
for_each_process(p) { for_each_process(p) {
if (task_pid_vnr(p) > 1 && if (task_pid_vnr(p) > 1 &&
!same_thread_group(p, current)) { !same_thread_group(p, current)) {
int err = group_send_sig_info(sig, info, p); int err = group_send_sig_info(sig, info, p,
PIDTYPE_MAX);
++count; ++count;
if (err != -EPERM) if (err != -EPERM)
retval = err; retval = err;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册