|
@@ -549,6 +549,7 @@ still_pending:
|
|
|
* a fast-pathed signal or we must have been
|
|
|
* out of queue space. So zero out the info.
|
|
|
*/
|
|
|
+ clear_siginfo(info);
|
|
|
info->si_signo = sig;
|
|
|
info->si_errno = 0;
|
|
|
info->si_code = SI_USER;
|
|
@@ -1043,6 +1044,7 @@ static int __send_signal(int sig, struct siginfo *info, struct task_struct *t,
|
|
|
list_add_tail(&q->list, &pending->list);
|
|
|
switch ((unsigned long) info) {
|
|
|
case (unsigned long) SEND_SIG_NOINFO:
|
|
|
+ clear_siginfo(&q->info);
|
|
|
q->info.si_signo = sig;
|
|
|
q->info.si_errno = 0;
|
|
|
q->info.si_code = SI_USER;
|
|
@@ -1051,6 +1053,7 @@ static int __send_signal(int sig, struct siginfo *info, struct task_struct *t,
|
|
|
q->info.si_uid = from_kuid_munged(current_user_ns(), current_uid());
|
|
|
break;
|
|
|
case (unsigned long) SEND_SIG_PRIV:
|
|
|
+ clear_siginfo(&q->info);
|
|
|
q->info.si_signo = sig;
|
|
|
q->info.si_errno = 0;
|
|
|
q->info.si_code = SI_KERNEL;
|
|
@@ -1623,6 +1626,7 @@ bool do_notify_parent(struct task_struct *tsk, int sig)
|
|
|
sig = SIGCHLD;
|
|
|
}
|
|
|
|
|
|
+ clear_siginfo(&info);
|
|
|
info.si_signo = sig;
|
|
|
info.si_errno = 0;
|
|
|
/*
|
|
@@ -1717,6 +1721,7 @@ static void do_notify_parent_cldstop(struct task_struct *tsk,
|
|
|
parent = tsk->real_parent;
|
|
|
}
|
|
|
|
|
|
+ clear_siginfo(&info);
|
|
|
info.si_signo = SIGCHLD;
|
|
|
info.si_errno = 0;
|
|
|
/*
|
|
@@ -1929,7 +1934,7 @@ static void ptrace_do_notify(int signr, int exit_code, int why)
|
|
|
{
|
|
|
siginfo_t info;
|
|
|
|
|
|
- memset(&info, 0, sizeof info);
|
|
|
+ clear_siginfo(&info);
|
|
|
info.si_signo = signr;
|
|
|
info.si_code = exit_code;
|
|
|
info.si_pid = task_pid_vnr(current);
|
|
@@ -2136,6 +2141,7 @@ static int ptrace_signal(int signr, siginfo_t *info)
|
|
|
* have updated *info via PTRACE_SETSIGINFO.
|
|
|
*/
|
|
|
if (signr != info->si_signo) {
|
|
|
+ clear_siginfo(info);
|
|
|
info->si_signo = signr;
|
|
|
info->si_errno = 0;
|
|
|
info->si_code = SI_USER;
|
|
@@ -2941,6 +2947,7 @@ SYSCALL_DEFINE2(kill, pid_t, pid, int, sig)
|
|
|
{
|
|
|
struct siginfo info;
|
|
|
|
|
|
+ clear_siginfo(&info);
|
|
|
info.si_signo = sig;
|
|
|
info.si_errno = 0;
|
|
|
info.si_code = SI_USER;
|