summaryrefslogtreecommitdiffstats
path: root/ipc
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2018-01-05 17:27:42 -0600
committerEric W. Biederman <ebiederm@xmission.com>2018-01-12 14:21:07 -0600
commitfaf1f22b61f2715224ba9b579e2a983e99b86823 (patch)
treefb871c31027141a61c4e1d898d967df6baab025d /ipc
parent8c5dbf2ae00bb8667f61c5edc6521c1fa2bbe4d7 (diff)
downloadlinux-faf1f22b61f2715224ba9b579e2a983e99b86823.tar.gz
linux-faf1f22b61f2715224ba9b579e2a983e99b86823.tar.bz2
linux-faf1f22b61f2715224ba9b579e2a983e99b86823.zip
signal: Ensure generic siginfos the kernel sends have all bits initialized
Call clear_siginfo to ensure stack allocated siginfos are fully initialized before being passed to the signal sending functions. This ensures that if there is the kind of confusion documented by TRAP_FIXME, FPE_FIXME, or BUS_FIXME the kernel won't send unitialized data to userspace when the kernel generates a signal with SI_USER but the copy to userspace assumes it is a different kind of signal, and different fields are initialized. This also prepares the way for turning copy_siginfo_to_user into a copy_to_user, by removing the need in many cases to perform a field by field copy simply to skip the uninitialized fields. Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
Diffstat (limited to 'ipc')
-rw-r--r--ipc/mqueue.c1
1 files changed, 1 insertions, 0 deletions
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)
case SIGEV_SIGNAL:
/* sends signal */
+ clear_siginfo(&sig_i);
sig_i.si_signo = info->notify.sigev_signo;
sig_i.si_errno = 0;
sig_i.si_code = SI_MESGQ;