diff options
-rw-r--r-- | fs/fcntl.c | 1 | ||||
-rw-r--r-- | ipc/mqueue.c | 1 | ||||
-rw-r--r-- | kernel/signal.c | 9 |
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; |