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: "Eric W. Biederman" <ebiederm@xmission.com>hifive-unleashed-5.1
parent
24122c7f49
commit
0102498083
|
@ -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,
|
||||||
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,
|
||||||
/*
|
/*
|
||||||
* 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)
|
||||||
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)
|
||||||
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)
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue