summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/fcntl.c1
-rw-r--r--ipc/mqueue.c1
-rw-r--r--kernel/signal.c9
3 files changed, 10 insertions, 1 deletions
diff --git a/fs/fcntl.c b/fs/fcntl.c
index 0522e283a4f4..c17369659f4a 100644
--- a/fs/fcntl.c
+++ b/fs/fcntl.c
@@ -737,6 +737,7 @@ static void send_sigio_to_task(struct task_struct *p,
737 delivered even if we can't queue. Failure to 737 delivered even if we can't queue. Failure to
738 queue in this case _should_ be reported; we fall 738 queue in this case _should_ be reported; we fall
739 back to SIGIO in that case. --sct */ 739 back to SIGIO in that case. --sct */
740 clear_siginfo(&si);
740 si.si_signo = signum; 741 si.si_signo = signum;
741 si.si_errno = 0; 742 si.si_errno = 0;
742 si.si_code = reason; 743 si.si_code = reason;
diff --git a/ipc/mqueue.c b/ipc/mqueue.c
index 9649ecd8a73a..17bc8b874d92 100644
--- a/ipc/mqueue.c
+++ b/ipc/mqueue.c
@@ -639,6 +639,7 @@ static void __do_notify(struct mqueue_inode_info *info)
639 case SIGEV_SIGNAL: 639 case SIGEV_SIGNAL:
640 /* sends signal */ 640 /* sends signal */
641 641
642 clear_siginfo(&sig_i);
642 sig_i.si_signo = info->notify.sigev_signo; 643 sig_i.si_signo = info->notify.sigev_signo;
643 sig_i.si_errno = 0; 644 sig_i.si_errno = 0;
644 sig_i.si_code = SI_MESGQ; 645 sig_i.si_code = SI_MESGQ;
diff --git a/kernel/signal.c b/kernel/signal.c
index fd182a845490..241d54958bbb 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -549,6 +549,7 @@ still_pending:
549 * a fast-pathed signal or we must have been 549 * a fast-pathed signal or we must have been
550 * out of queue space. So zero out the info. 550 * out of queue space. So zero out the info.
551 */ 551 */
552 clear_siginfo(info);
552 info->si_signo = sig; 553 info->si_signo = sig;
553 info->si_errno = 0; 554 info->si_errno = 0;
554 info->si_code = SI_USER; 555 info->si_code = SI_USER;
@@ -1043,6 +1044,7 @@ static int __send_signal(int sig, struct siginfo *info, struct task_struct *t,
1043 list_add_tail(&q->list, &pending->list); 1044 list_add_tail(&q->list, &pending->list);
1044 switch ((unsigned long) info) { 1045 switch ((unsigned long) info) {
1045 case (unsigned long) SEND_SIG_NOINFO: 1046 case (unsigned long) SEND_SIG_NOINFO:
1047 clear_siginfo(&q->info);
1046 q->info.si_signo = sig; 1048 q->info.si_signo = sig;
1047 q->info.si_errno = 0; 1049 q->info.si_errno = 0;
1048 q->info.si_code = SI_USER; 1050 q->info.si_code = SI_USER;
@@ -1051,6 +1053,7 @@ static int __send_signal(int sig, struct siginfo *info, struct task_struct *t,
1051 q->info.si_uid = from_kuid_munged(current_user_ns(), current_uid()); 1053 q->info.si_uid = from_kuid_munged(current_user_ns(), current_uid());
1052 break; 1054 break;
1053 case (unsigned long) SEND_SIG_PRIV: 1055 case (unsigned long) SEND_SIG_PRIV:
1056 clear_siginfo(&q->info);
1054 q->info.si_signo = sig; 1057 q->info.si_signo = sig;
1055 q->info.si_errno = 0; 1058 q->info.si_errno = 0;
1056 q->info.si_code = SI_KERNEL; 1059 q->info.si_code = SI_KERNEL;
@@ -1623,6 +1626,7 @@ bool do_notify_parent(struct task_struct *tsk, int sig)
1623 sig = SIGCHLD; 1626 sig = SIGCHLD;
1624 } 1627 }
1625 1628
1629 clear_siginfo(&info);
1626 info.si_signo = sig; 1630 info.si_signo = sig;
1627 info.si_errno = 0; 1631 info.si_errno = 0;
1628 /* 1632 /*
@@ -1717,6 +1721,7 @@ static void do_notify_parent_cldstop(struct task_struct *tsk,
1717 parent = tsk->real_parent; 1721 parent = tsk->real_parent;
1718 } 1722 }
1719 1723
1724 clear_siginfo(&info);
1720 info.si_signo = SIGCHLD; 1725 info.si_signo = SIGCHLD;
1721 info.si_errno = 0; 1726 info.si_errno = 0;
1722 /* 1727 /*
@@ -1929,7 +1934,7 @@ static void ptrace_do_notify(int signr, int exit_code, int why)
1929{ 1934{
1930 siginfo_t info; 1935 siginfo_t info;
1931 1936
1932 memset(&info, 0, sizeof info); 1937 clear_siginfo(&info);
1933 info.si_signo = signr; 1938 info.si_signo = signr;
1934 info.si_code = exit_code; 1939 info.si_code = exit_code;
1935 info.si_pid = task_pid_vnr(current); 1940 info.si_pid = task_pid_vnr(current);
@@ -2136,6 +2141,7 @@ static int ptrace_signal(int signr, siginfo_t *info)
2136 * have updated *info via PTRACE_SETSIGINFO. 2141 * have updated *info via PTRACE_SETSIGINFO.
2137 */ 2142 */
2138 if (signr != info->si_signo) { 2143 if (signr != info->si_signo) {
2144 clear_siginfo(info);
2139 info->si_signo = signr; 2145 info->si_signo = signr;
2140 info->si_errno = 0; 2146 info->si_errno = 0;
2141 info->si_code = SI_USER; 2147 info->si_code = SI_USER;
@@ -2941,6 +2947,7 @@ SYSCALL_DEFINE2(kill, pid_t, pid, int, sig)
2941{ 2947{
2942 struct siginfo info; 2948 struct siginfo info;
2943 2949
2950 clear_siginfo(&info);
2944 info.si_signo = sig; 2951 info.si_signo = sig;
2945 info.si_errno = 0; 2952 info.si_errno = 0;
2946 info.si_code = SI_USER; 2953 info.si_code = SI_USER;