aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/include/asm/compat.h2
-rw-r--r--drivers/usb/core/devio.c4
-rw-r--r--fs/binfmt_elf.c6
-rw-r--r--fs/coredump.c2
-rw-r--r--fs/fcntl.c2
-rw-r--r--fs/signalfd.c6
-rw-r--r--include/linux/binfmts.h2
-rw-r--r--include/linux/compat.h4
-rw-r--r--include/linux/coredump.h4
-rw-r--r--include/linux/lsm_hooks.h4
-rw-r--r--include/linux/posix-timers.h2
-rw-r--r--include/linux/ptrace.h2
-rw-r--r--include/linux/sched.h2
-rw-r--r--include/linux/sched/signal.h18
-rw-r--r--include/linux/security.h6
-rw-r--r--include/linux/signal.h15
-rw-r--r--include/linux/signal_types.h11
-rw-r--r--include/trace/events/signal.h4
-rw-r--r--ipc/mqueue.c2
-rw-r--r--kernel/ptrace.c10
-rw-r--r--kernel/seccomp.c6
-rw-r--r--kernel/signal.c151
-rw-r--r--kernel/time/posix-timers.c2
-rw-r--r--security/apparmor/lsm.c2
-rw-r--r--security/security.c2
-rw-r--r--security/selinux/hooks.c2
-rw-r--r--security/smack/smack_lsm.c2
27 files changed, 165 insertions, 110 deletions
diff --git a/arch/x86/include/asm/compat.h b/arch/x86/include/asm/compat.h
index fb97cf7c4137..a0f46bdd9f24 100644
--- a/arch/x86/include/asm/compat.h
+++ b/arch/x86/include/asm/compat.h
@@ -240,6 +240,6 @@ static inline bool in_compat_syscall(void)
240 240
241struct compat_siginfo; 241struct compat_siginfo;
242int __copy_siginfo_to_user32(struct compat_siginfo __user *to, 242int __copy_siginfo_to_user32(struct compat_siginfo __user *to,
243 const siginfo_t *from, bool x32_ABI); 243 const kernel_siginfo_t *from, bool x32_ABI);
244 244
245#endif /* _ASM_X86_COMPAT_H */ 245#endif /* _ASM_X86_COMPAT_H */
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
index 6ce77b33da61..c260ea8808b0 100644
--- a/drivers/usb/core/devio.c
+++ b/drivers/usb/core/devio.c
@@ -582,7 +582,7 @@ static void async_completed(struct urb *urb)
582{ 582{
583 struct async *as = urb->context; 583 struct async *as = urb->context;
584 struct usb_dev_state *ps = as->ps; 584 struct usb_dev_state *ps = as->ps;
585 struct siginfo sinfo; 585 struct kernel_siginfo sinfo;
586 struct pid *pid = NULL; 586 struct pid *pid = NULL;
587 const struct cred *cred = NULL; 587 const struct cred *cred = NULL;
588 unsigned long flags; 588 unsigned long flags;
@@ -2599,7 +2599,7 @@ const struct file_operations usbdev_file_operations = {
2599static void usbdev_remove(struct usb_device *udev) 2599static void usbdev_remove(struct usb_device *udev)
2600{ 2600{
2601 struct usb_dev_state *ps; 2601 struct usb_dev_state *ps;
2602 struct siginfo sinfo; 2602 struct kernel_siginfo sinfo;
2603 2603
2604 while (!list_empty(&udev->filelist)) { 2604 while (!list_empty(&udev->filelist)) {
2605 ps = list_entry(udev->filelist.next, struct usb_dev_state, list); 2605 ps = list_entry(udev->filelist.next, struct usb_dev_state, list);
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
index efae2fb0930a..54207327f98f 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -1580,7 +1580,7 @@ static void fill_auxv_note(struct memelfnote *note, struct mm_struct *mm)
1580} 1580}
1581 1581
1582static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata, 1582static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata,
1583 const siginfo_t *siginfo) 1583 const kernel_siginfo_t *siginfo)
1584{ 1584{
1585 mm_segment_t old_fs = get_fs(); 1585 mm_segment_t old_fs = get_fs();
1586 set_fs(KERNEL_DS); 1586 set_fs(KERNEL_DS);
@@ -1782,7 +1782,7 @@ static int fill_thread_core_info(struct elf_thread_core_info *t,
1782 1782
1783static int fill_note_info(struct elfhdr *elf, int phdrs, 1783static int fill_note_info(struct elfhdr *elf, int phdrs,
1784 struct elf_note_info *info, 1784 struct elf_note_info *info,
1785 const siginfo_t *siginfo, struct pt_regs *regs) 1785 const kernel_siginfo_t *siginfo, struct pt_regs *regs)
1786{ 1786{
1787 struct task_struct *dump_task = current; 1787 struct task_struct *dump_task = current;
1788 const struct user_regset_view *view = task_user_regset_view(dump_task); 1788 const struct user_regset_view *view = task_user_regset_view(dump_task);
@@ -2031,7 +2031,7 @@ static int elf_note_info_init(struct elf_note_info *info)
2031 2031
2032static int fill_note_info(struct elfhdr *elf, int phdrs, 2032static int fill_note_info(struct elfhdr *elf, int phdrs,
2033 struct elf_note_info *info, 2033 struct elf_note_info *info,
2034 const siginfo_t *siginfo, struct pt_regs *regs) 2034 const kernel_siginfo_t *siginfo, struct pt_regs *regs)
2035{ 2035{
2036 struct list_head *t; 2036 struct list_head *t;
2037 struct core_thread *ct; 2037 struct core_thread *ct;
diff --git a/fs/coredump.c b/fs/coredump.c
index 1e2c87acac9b..e42e17e55bfd 100644
--- a/fs/coredump.c
+++ b/fs/coredump.c
@@ -536,7 +536,7 @@ static int umh_pipe_setup(struct subprocess_info *info, struct cred *new)
536 return err; 536 return err;
537} 537}
538 538
539void do_coredump(const siginfo_t *siginfo) 539void do_coredump(const kernel_siginfo_t *siginfo)
540{ 540{
541 struct core_state core_state; 541 struct core_state core_state;
542 struct core_name cn; 542 struct core_name cn;
diff --git a/fs/fcntl.c b/fs/fcntl.c
index 4137d96534a6..083185174c6d 100644
--- a/fs/fcntl.c
+++ b/fs/fcntl.c
@@ -735,7 +735,7 @@ static void send_sigio_to_task(struct task_struct *p,
735 return; 735 return;
736 736
737 switch (signum) { 737 switch (signum) {
738 siginfo_t si; 738 kernel_siginfo_t si;
739 default: 739 default:
740 /* Queue a rt signal with the appropriate fd as its 740 /* Queue a rt signal with the appropriate fd as its
741 value. We use SI_SIGIO as the source, not 741 value. We use SI_SIGIO as the source, not
diff --git a/fs/signalfd.c b/fs/signalfd.c
index 4fcd1498acf5..757afc7c5895 100644
--- a/fs/signalfd.c
+++ b/fs/signalfd.c
@@ -79,7 +79,7 @@ static __poll_t signalfd_poll(struct file *file, poll_table *wait)
79 * Copied from copy_siginfo_to_user() in kernel/signal.c 79 * Copied from copy_siginfo_to_user() in kernel/signal.c
80 */ 80 */
81static int signalfd_copyinfo(struct signalfd_siginfo __user *uinfo, 81static int signalfd_copyinfo(struct signalfd_siginfo __user *uinfo,
82 siginfo_t const *kinfo) 82 kernel_siginfo_t const *kinfo)
83{ 83{
84 struct signalfd_siginfo new; 84 struct signalfd_siginfo new;
85 85
@@ -163,7 +163,7 @@ static int signalfd_copyinfo(struct signalfd_siginfo __user *uinfo,
163 return sizeof(*uinfo); 163 return sizeof(*uinfo);
164} 164}
165 165
166static ssize_t signalfd_dequeue(struct signalfd_ctx *ctx, siginfo_t *info, 166static ssize_t signalfd_dequeue(struct signalfd_ctx *ctx, kernel_siginfo_t *info,
167 int nonblock) 167 int nonblock)
168{ 168{
169 ssize_t ret; 169 ssize_t ret;
@@ -215,7 +215,7 @@ static ssize_t signalfd_read(struct file *file, char __user *buf, size_t count,
215 struct signalfd_siginfo __user *siginfo; 215 struct signalfd_siginfo __user *siginfo;
216 int nonblock = file->f_flags & O_NONBLOCK; 216 int nonblock = file->f_flags & O_NONBLOCK;
217 ssize_t ret, total = 0; 217 ssize_t ret, total = 0;
218 siginfo_t info; 218 kernel_siginfo_t info;
219 219
220 count /= sizeof(struct signalfd_siginfo); 220 count /= sizeof(struct signalfd_siginfo);
221 if (!count) 221 if (!count)
diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h
index c05f24fac4f6..e9f5fe69df31 100644
--- a/include/linux/binfmts.h
+++ b/include/linux/binfmts.h
@@ -78,7 +78,7 @@ struct linux_binprm {
78 78
79/* Function parameter for binfmt->coredump */ 79/* Function parameter for binfmt->coredump */
80struct coredump_params { 80struct coredump_params {
81 const siginfo_t *siginfo; 81 const kernel_siginfo_t *siginfo;
82 struct pt_regs *regs; 82 struct pt_regs *regs;
83 struct file *file; 83 struct file *file;
84 unsigned long limit; 84 unsigned long limit;
diff --git a/include/linux/compat.h b/include/linux/compat.h
index 1a3c4f37e908..4565d65b1776 100644
--- a/include/linux/compat.h
+++ b/include/linux/compat.h
@@ -452,8 +452,8 @@ long compat_get_bitmap(unsigned long *mask, const compat_ulong_t __user *umask,
452 unsigned long bitmap_size); 452 unsigned long bitmap_size);
453long compat_put_bitmap(compat_ulong_t __user *umask, unsigned long *mask, 453long compat_put_bitmap(compat_ulong_t __user *umask, unsigned long *mask,
454 unsigned long bitmap_size); 454 unsigned long bitmap_size);
455int copy_siginfo_from_user32(siginfo_t *to, const struct compat_siginfo __user *from); 455int copy_siginfo_from_user32(kernel_siginfo_t *to, const struct compat_siginfo __user *from);
456int copy_siginfo_to_user32(struct compat_siginfo __user *to, const siginfo_t *from); 456int copy_siginfo_to_user32(struct compat_siginfo __user *to, const kernel_siginfo_t *from);
457int get_compat_sigevent(struct sigevent *event, 457int get_compat_sigevent(struct sigevent *event,
458 const struct compat_sigevent __user *u_event); 458 const struct compat_sigevent __user *u_event);
459 459
diff --git a/include/linux/coredump.h b/include/linux/coredump.h
index 207aed96a5b7..abf4b4e65dbb 100644
--- a/include/linux/coredump.h
+++ b/include/linux/coredump.h
@@ -17,9 +17,9 @@ extern int dump_emit(struct coredump_params *cprm, const void *addr, int nr);
17extern int dump_align(struct coredump_params *cprm, int align); 17extern int dump_align(struct coredump_params *cprm, int align);
18extern void dump_truncate(struct coredump_params *cprm); 18extern void dump_truncate(struct coredump_params *cprm);
19#ifdef CONFIG_COREDUMP 19#ifdef CONFIG_COREDUMP
20extern void do_coredump(const siginfo_t *siginfo); 20extern void do_coredump(const kernel_siginfo_t *siginfo);
21#else 21#else
22static inline void do_coredump(const siginfo_t *siginfo) {} 22static inline void do_coredump(const kernel_siginfo_t *siginfo) {}
23#endif 23#endif
24 24
25#endif /* _LINUX_COREDUMP_H */ 25#endif /* _LINUX_COREDUMP_H */
diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h
index 97a020c616ad..bb40f6d34163 100644
--- a/include/linux/lsm_hooks.h
+++ b/include/linux/lsm_hooks.h
@@ -672,7 +672,7 @@
672 * Return 0 if permission is granted. 672 * Return 0 if permission is granted.
673 * @task_kill: 673 * @task_kill:
674 * Check permission before sending signal @sig to @p. @info can be NULL, 674 * Check permission before sending signal @sig to @p. @info can be NULL,
675 * the constant 1, or a pointer to a siginfo structure. If @info is 1 or 675 * the constant 1, or a pointer to a kernel_siginfo structure. If @info is 1 or
676 * SI_FROMKERNEL(info) is true, then the signal should be viewed as coming 676 * SI_FROMKERNEL(info) is true, then the signal should be viewed as coming
677 * from the kernel and should typically be permitted. 677 * from the kernel and should typically be permitted.
678 * SIGIO signals are handled separately by the send_sigiotask hook in 678 * SIGIO signals are handled separately by the send_sigiotask hook in
@@ -1606,7 +1606,7 @@ union security_list_options {
1606 int (*task_setscheduler)(struct task_struct *p); 1606 int (*task_setscheduler)(struct task_struct *p);
1607 int (*task_getscheduler)(struct task_struct *p); 1607 int (*task_getscheduler)(struct task_struct *p);
1608 int (*task_movememory)(struct task_struct *p); 1608 int (*task_movememory)(struct task_struct *p);
1609 int (*task_kill)(struct task_struct *p, struct siginfo *info, 1609 int (*task_kill)(struct task_struct *p, struct kernel_siginfo *info,
1610 int sig, const struct cred *cred); 1610 int sig, const struct cred *cred);
1611 int (*task_prctl)(int option, unsigned long arg2, unsigned long arg3, 1611 int (*task_prctl)(int option, unsigned long arg2, unsigned long arg3,
1612 unsigned long arg4, unsigned long arg5); 1612 unsigned long arg4, unsigned long arg5);
diff --git a/include/linux/posix-timers.h b/include/linux/posix-timers.h
index ee7e987ea1b4..e96581ca7c9d 100644
--- a/include/linux/posix-timers.h
+++ b/include/linux/posix-timers.h
@@ -126,5 +126,5 @@ void set_process_cpu_timer(struct task_struct *task, unsigned int clock_idx,
126 126
127void update_rlimit_cpu(struct task_struct *task, unsigned long rlim_new); 127void update_rlimit_cpu(struct task_struct *task, unsigned long rlim_new);
128 128
129void posixtimer_rearm(struct siginfo *info); 129void posixtimer_rearm(struct kernel_siginfo *info);
130#endif 130#endif
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
index 1de2235511c8..d19a795100da 100644
--- a/include/linux/ptrace.h
+++ b/include/linux/ptrace.h
@@ -341,7 +341,7 @@ extern void user_single_step_report(struct pt_regs *regs);
341#else 341#else
342static inline void user_single_step_report(struct pt_regs *regs) 342static inline void user_single_step_report(struct pt_regs *regs)
343{ 343{
344 siginfo_t info; 344 kernel_siginfo_t info;
345 clear_siginfo(&info); 345 clear_siginfo(&info);
346 info.si_signo = SIGTRAP; 346 info.si_signo = SIGTRAP;
347 info.si_errno = 0; 347 info.si_errno = 0;
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 977cb57d7bc9..2ba88082e1ef 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -960,7 +960,7 @@ struct task_struct {
960 960
961 /* Ptrace state: */ 961 /* Ptrace state: */
962 unsigned long ptrace_message; 962 unsigned long ptrace_message;
963 siginfo_t *last_siginfo; 963 kernel_siginfo_t *last_siginfo;
964 964
965 struct task_io_accounting ioac; 965 struct task_io_accounting ioac;
966#ifdef CONFIG_TASK_XACCT 966#ifdef CONFIG_TASK_XACCT
diff --git a/include/linux/sched/signal.h b/include/linux/sched/signal.h
index 9e07f3521549..13789d10a50e 100644
--- a/include/linux/sched/signal.h
+++ b/include/linux/sched/signal.h
@@ -270,12 +270,12 @@ static inline int signal_group_exit(const struct signal_struct *sig)
270extern void flush_signals(struct task_struct *); 270extern void flush_signals(struct task_struct *);
271extern void ignore_signals(struct task_struct *); 271extern void ignore_signals(struct task_struct *);
272extern void flush_signal_handlers(struct task_struct *, int force_default); 272extern void flush_signal_handlers(struct task_struct *, int force_default);
273extern int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info); 273extern int dequeue_signal(struct task_struct *tsk, sigset_t *mask, kernel_siginfo_t *info);
274 274
275static inline int kernel_dequeue_signal(void) 275static inline int kernel_dequeue_signal(void)
276{ 276{
277 struct task_struct *tsk = current; 277 struct task_struct *tsk = current;
278 siginfo_t __info; 278 kernel_siginfo_t __info;
279 int ret; 279 int ret;
280 280
281 spin_lock_irq(&tsk->sighand->siglock); 281 spin_lock_irq(&tsk->sighand->siglock);
@@ -322,12 +322,12 @@ int force_sig_pkuerr(void __user *addr, u32 pkey);
322 322
323int force_sig_ptrace_errno_trap(int errno, void __user *addr); 323int force_sig_ptrace_errno_trap(int errno, void __user *addr);
324 324
325extern int send_sig_info(int, struct siginfo *, struct task_struct *); 325extern int send_sig_info(int, struct kernel_siginfo *, struct task_struct *);
326extern void force_sigsegv(int sig, struct task_struct *p); 326extern void force_sigsegv(int sig, struct task_struct *p);
327extern int force_sig_info(int, struct siginfo *, struct task_struct *); 327extern int force_sig_info(int, struct kernel_siginfo *, struct task_struct *);
328extern int __kill_pgrp_info(int sig, struct siginfo *info, struct pid *pgrp); 328extern int __kill_pgrp_info(int sig, struct kernel_siginfo *info, struct pid *pgrp);
329extern int kill_pid_info(int sig, struct siginfo *info, struct pid *pid); 329extern int kill_pid_info(int sig, struct kernel_siginfo *info, struct pid *pid);
330extern int kill_pid_info_as_cred(int, struct siginfo *, struct pid *, 330extern int kill_pid_info_as_cred(int, struct kernel_siginfo *, struct pid *,
331 const struct cred *); 331 const struct cred *);
332extern int kill_pgrp(struct pid *pid, int sig, int priv); 332extern int kill_pgrp(struct pid *pid, int sig, int priv);
333extern int kill_pid(struct pid *pid, int sig, int priv); 333extern int kill_pid(struct pid *pid, int sig, int priv);
@@ -475,8 +475,8 @@ static inline int kill_cad_pid(int sig, int priv)
475} 475}
476 476
477/* These can be the second arg to send_sig_info/send_group_sig_info. */ 477/* These can be the second arg to send_sig_info/send_group_sig_info. */
478#define SEND_SIG_NOINFO ((struct siginfo *) 0) 478#define SEND_SIG_NOINFO ((struct kernel_siginfo *) 0)
479#define SEND_SIG_PRIV ((struct siginfo *) 1) 479#define SEND_SIG_PRIV ((struct kernel_siginfo *) 1)
480 480
481/* 481/*
482 * True if we are on the alternate signal stack. 482 * True if we are on the alternate signal stack.
diff --git a/include/linux/security.h b/include/linux/security.h
index 75f4156c84d7..d170a5b031f3 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -35,7 +35,7 @@
35struct linux_binprm; 35struct linux_binprm;
36struct cred; 36struct cred;
37struct rlimit; 37struct rlimit;
38struct siginfo; 38struct kernel_siginfo;
39struct sembuf; 39struct sembuf;
40struct kern_ipc_perm; 40struct kern_ipc_perm;
41struct audit_context; 41struct audit_context;
@@ -361,7 +361,7 @@ int security_task_setrlimit(struct task_struct *p, unsigned int resource,
361int security_task_setscheduler(struct task_struct *p); 361int security_task_setscheduler(struct task_struct *p);
362int security_task_getscheduler(struct task_struct *p); 362int security_task_getscheduler(struct task_struct *p);
363int security_task_movememory(struct task_struct *p); 363int security_task_movememory(struct task_struct *p);
364int security_task_kill(struct task_struct *p, struct siginfo *info, 364int security_task_kill(struct task_struct *p, struct kernel_siginfo *info,
365 int sig, const struct cred *cred); 365 int sig, const struct cred *cred);
366int security_task_prctl(int option, unsigned long arg2, unsigned long arg3, 366int security_task_prctl(int option, unsigned long arg2, unsigned long arg3,
367 unsigned long arg4, unsigned long arg5); 367 unsigned long arg4, unsigned long arg5);
@@ -1020,7 +1020,7 @@ static inline int security_task_movememory(struct task_struct *p)
1020} 1020}
1021 1021
1022static inline int security_task_kill(struct task_struct *p, 1022static inline int security_task_kill(struct task_struct *p,
1023 struct siginfo *info, int sig, 1023 struct kernel_siginfo *info, int sig,
1024 const struct cred *cred) 1024 const struct cred *cred)
1025{ 1025{
1026 return 0; 1026 return 0;
diff --git a/include/linux/signal.h b/include/linux/signal.h
index de94c159bfb0..70031b10b918 100644
--- a/include/linux/signal.h
+++ b/include/linux/signal.h
@@ -11,18 +11,19 @@ struct task_struct;
11/* for sysctl */ 11/* for sysctl */
12extern int print_fatal_signals; 12extern int print_fatal_signals;
13 13
14static inline void copy_siginfo(struct siginfo *to, const struct siginfo *from) 14static inline void copy_siginfo(kernel_siginfo_t *to,
15 const kernel_siginfo_t *from)
15{ 16{
16 memcpy(to, from, sizeof(*to)); 17 memcpy(to, from, sizeof(*to));
17} 18}
18 19
19static inline void clear_siginfo(struct siginfo *info) 20static inline void clear_siginfo(kernel_siginfo_t *info)
20{ 21{
21 memset(info, 0, sizeof(*info)); 22 memset(info, 0, sizeof(*info));
22} 23}
23 24
24int copy_siginfo_to_user(struct siginfo __user *to, const struct siginfo *from); 25int copy_siginfo_to_user(siginfo_t __user *to, const kernel_siginfo_t *from);
25int copy_siginfo_from_user(struct siginfo *to, const struct siginfo __user *from); 26int copy_siginfo_from_user(kernel_siginfo_t *to, const siginfo_t __user *from);
26 27
27enum siginfo_layout { 28enum siginfo_layout {
28 SIL_KILL, 29 SIL_KILL,
@@ -258,11 +259,11 @@ struct pt_regs;
258enum pid_type; 259enum pid_type;
259 260
260extern int next_signal(struct sigpending *pending, sigset_t *mask); 261extern int next_signal(struct sigpending *pending, sigset_t *mask);
261extern int do_send_sig_info(int sig, struct siginfo *info, 262extern int do_send_sig_info(int sig, struct kernel_siginfo *info,
262 struct task_struct *p, enum pid_type type); 263 struct task_struct *p, enum pid_type type);
263extern int group_send_sig_info(int sig, struct siginfo *info, 264extern int group_send_sig_info(int sig, struct kernel_siginfo *info,
264 struct task_struct *p, enum pid_type type); 265 struct task_struct *p, enum pid_type type);
265extern int __group_send_sig_info(int, struct siginfo *, struct task_struct *); 266extern int __group_send_sig_info(int, struct kernel_siginfo *, struct task_struct *);
266extern int sigprocmask(int, sigset_t *, sigset_t *); 267extern int sigprocmask(int, sigset_t *, sigset_t *);
267extern void set_current_blocked(sigset_t *); 268extern void set_current_blocked(sigset_t *);
268extern void __set_current_blocked(const sigset_t *); 269extern void __set_current_blocked(const sigset_t *);
diff --git a/include/linux/signal_types.h b/include/linux/signal_types.h
index 222ae696000b..2a40a9c5e4ad 100644
--- a/include/linux/signal_types.h
+++ b/include/linux/signal_types.h
@@ -9,6 +9,13 @@
9#include <linux/list.h> 9#include <linux/list.h>
10#include <uapi/linux/signal.h> 10#include <uapi/linux/signal.h>
11 11
12typedef struct kernel_siginfo {
13 union {
14 __SIGINFO;
15 int _si_pad[SI_MAX_SIZE/sizeof(int)];
16 };
17} kernel_siginfo_t;
18
12/* 19/*
13 * Real Time signals may be queued. 20 * Real Time signals may be queued.
14 */ 21 */
@@ -16,7 +23,7 @@
16struct sigqueue { 23struct sigqueue {
17 struct list_head list; 24 struct list_head list;
18 int flags; 25 int flags;
19 siginfo_t info; 26 kernel_siginfo_t info;
20 struct user_struct *user; 27 struct user_struct *user;
21}; 28};
22 29
@@ -60,7 +67,7 @@ struct old_sigaction {
60 67
61struct ksignal { 68struct ksignal {
62 struct k_sigaction ka; 69 struct k_sigaction ka;
63 siginfo_t info; 70 kernel_siginfo_t info;
64 int sig; 71 int sig;
65}; 72};
66 73
diff --git a/include/trace/events/signal.h b/include/trace/events/signal.h
index 3deeed50ffd0..1db7e4b07c01 100644
--- a/include/trace/events/signal.h
+++ b/include/trace/events/signal.h
@@ -49,7 +49,7 @@ enum {
49 */ 49 */
50TRACE_EVENT(signal_generate, 50TRACE_EVENT(signal_generate,
51 51
52 TP_PROTO(int sig, struct siginfo *info, struct task_struct *task, 52 TP_PROTO(int sig, struct kernel_siginfo *info, struct task_struct *task,
53 int group, int result), 53 int group, int result),
54 54
55 TP_ARGS(sig, info, task, group, result), 55 TP_ARGS(sig, info, task, group, result),
@@ -95,7 +95,7 @@ TRACE_EVENT(signal_generate,
95 */ 95 */
96TRACE_EVENT(signal_deliver, 96TRACE_EVENT(signal_deliver,
97 97
98 TP_PROTO(int sig, struct siginfo *info, struct k_sigaction *ka), 98 TP_PROTO(int sig, struct kernel_siginfo *info, struct k_sigaction *ka),
99 99
100 TP_ARGS(sig, info, ka), 100 TP_ARGS(sig, info, ka),
101 101
diff --git a/ipc/mqueue.c b/ipc/mqueue.c
index c0d58f390c3b..cc41de3b8deb 100644
--- a/ipc/mqueue.c
+++ b/ipc/mqueue.c
@@ -655,7 +655,7 @@ static void __do_notify(struct mqueue_inode_info *info)
655 * synchronously. */ 655 * synchronously. */
656 if (info->notify_owner && 656 if (info->notify_owner &&
657 info->attr.mq_curmsgs == 1) { 657 info->attr.mq_curmsgs == 1) {
658 struct siginfo sig_i; 658 struct kernel_siginfo sig_i;
659 switch (info->notify.sigev_notify) { 659 switch (info->notify.sigev_notify) {
660 case SIGEV_NONE: 660 case SIGEV_NONE:
661 break; 661 break;
diff --git a/kernel/ptrace.c b/kernel/ptrace.c
index a807ff5cc1a9..c2cee9db5204 100644
--- a/kernel/ptrace.c
+++ b/kernel/ptrace.c
@@ -651,7 +651,7 @@ static int ptrace_setoptions(struct task_struct *child, unsigned long data)
651 return 0; 651 return 0;
652} 652}
653 653
654static int ptrace_getsiginfo(struct task_struct *child, siginfo_t *info) 654static int ptrace_getsiginfo(struct task_struct *child, kernel_siginfo_t *info)
655{ 655{
656 unsigned long flags; 656 unsigned long flags;
657 int error = -ESRCH; 657 int error = -ESRCH;
@@ -667,7 +667,7 @@ static int ptrace_getsiginfo(struct task_struct *child, siginfo_t *info)
667 return error; 667 return error;
668} 668}
669 669
670static int ptrace_setsiginfo(struct task_struct *child, const siginfo_t *info) 670static int ptrace_setsiginfo(struct task_struct *child, const kernel_siginfo_t *info)
671{ 671{
672 unsigned long flags; 672 unsigned long flags;
673 int error = -ESRCH; 673 int error = -ESRCH;
@@ -709,7 +709,7 @@ static int ptrace_peek_siginfo(struct task_struct *child,
709 pending = &child->pending; 709 pending = &child->pending;
710 710
711 for (i = 0; i < arg.nr; ) { 711 for (i = 0; i < arg.nr; ) {
712 siginfo_t info; 712 kernel_siginfo_t info;
713 s32 off = arg.off + i; 713 s32 off = arg.off + i;
714 714
715 spin_lock_irq(&child->sighand->siglock); 715 spin_lock_irq(&child->sighand->siglock);
@@ -885,7 +885,7 @@ int ptrace_request(struct task_struct *child, long request,
885{ 885{
886 bool seized = child->ptrace & PT_SEIZED; 886 bool seized = child->ptrace & PT_SEIZED;
887 int ret = -EIO; 887 int ret = -EIO;
888 siginfo_t siginfo, *si; 888 kernel_siginfo_t siginfo, *si;
889 void __user *datavp = (void __user *) data; 889 void __user *datavp = (void __user *) data;
890 unsigned long __user *datalp = datavp; 890 unsigned long __user *datalp = datavp;
891 unsigned long flags; 891 unsigned long flags;
@@ -1180,7 +1180,7 @@ int compat_ptrace_request(struct task_struct *child, compat_long_t request,
1180{ 1180{
1181 compat_ulong_t __user *datap = compat_ptr(data); 1181 compat_ulong_t __user *datap = compat_ptr(data);
1182 compat_ulong_t word; 1182 compat_ulong_t word;
1183 siginfo_t siginfo; 1183 kernel_siginfo_t siginfo;
1184 int ret; 1184 int ret;
1185 1185
1186 switch (request) { 1186 switch (request) {
diff --git a/kernel/seccomp.c b/kernel/seccomp.c
index fd023ac24e10..4d7809cdd27d 100644
--- a/kernel/seccomp.c
+++ b/kernel/seccomp.c
@@ -522,7 +522,7 @@ void put_seccomp_filter(struct task_struct *tsk)
522 __put_seccomp_filter(tsk->seccomp.filter); 522 __put_seccomp_filter(tsk->seccomp.filter);
523} 523}
524 524
525static void seccomp_init_siginfo(siginfo_t *info, int syscall, int reason) 525static void seccomp_init_siginfo(kernel_siginfo_t *info, int syscall, int reason)
526{ 526{
527 clear_siginfo(info); 527 clear_siginfo(info);
528 info->si_signo = SIGSYS; 528 info->si_signo = SIGSYS;
@@ -542,7 +542,7 @@ static void seccomp_init_siginfo(siginfo_t *info, int syscall, int reason)
542 */ 542 */
543static void seccomp_send_sigsys(int syscall, int reason) 543static void seccomp_send_sigsys(int syscall, int reason)
544{ 544{
545 struct siginfo info; 545 struct kernel_siginfo info;
546 seccomp_init_siginfo(&info, syscall, reason); 546 seccomp_init_siginfo(&info, syscall, reason);
547 force_sig_info(SIGSYS, &info, current); 547 force_sig_info(SIGSYS, &info, current);
548} 548}
@@ -747,7 +747,7 @@ static int __seccomp_filter(int this_syscall, const struct seccomp_data *sd,
747 /* Dump core only if this is the last remaining thread. */ 747 /* Dump core only if this is the last remaining thread. */
748 if (action == SECCOMP_RET_KILL_PROCESS || 748 if (action == SECCOMP_RET_KILL_PROCESS ||
749 get_nr_threads(current) == 1) { 749 get_nr_threads(current) == 1) {
750 siginfo_t info; 750 kernel_siginfo_t info;
751 751
752 /* Show the original registers in the dump. */ 752 /* Show the original registers in the dump. */
753 syscall_rollback(current, task_pt_regs(current)); 753 syscall_rollback(current, task_pt_regs(current));
diff --git a/kernel/signal.c b/kernel/signal.c
index c0e289e62d77..161cad4e448c 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -549,7 +549,7 @@ bool unhandled_signal(struct task_struct *tsk, int sig)
549 return !tsk->ptrace; 549 return !tsk->ptrace;
550} 550}
551 551
552static void collect_signal(int sig, struct sigpending *list, siginfo_t *info, 552static void collect_signal(int sig, struct sigpending *list, kernel_siginfo_t *info,
553 bool *resched_timer) 553 bool *resched_timer)
554{ 554{
555 struct sigqueue *q, *first = NULL; 555 struct sigqueue *q, *first = NULL;
@@ -595,7 +595,7 @@ still_pending:
595} 595}
596 596
597static int __dequeue_signal(struct sigpending *pending, sigset_t *mask, 597static int __dequeue_signal(struct sigpending *pending, sigset_t *mask,
598 siginfo_t *info, bool *resched_timer) 598 kernel_siginfo_t *info, bool *resched_timer)
599{ 599{
600 int sig = next_signal(pending, mask); 600 int sig = next_signal(pending, mask);
601 601
@@ -610,7 +610,7 @@ static int __dequeue_signal(struct sigpending *pending, sigset_t *mask,
610 * 610 *
611 * All callers have to hold the siglock. 611 * All callers have to hold the siglock.
612 */ 612 */
613int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info) 613int dequeue_signal(struct task_struct *tsk, sigset_t *mask, kernel_siginfo_t *info)
614{ 614{
615 bool resched_timer = false; 615 bool resched_timer = false;
616 int signr; 616 int signr;
@@ -737,12 +737,12 @@ static void flush_sigqueue_mask(sigset_t *mask, struct sigpending *s)
737 } 737 }
738} 738}
739 739
740static inline int is_si_special(const struct siginfo *info) 740static inline int is_si_special(const struct kernel_siginfo *info)
741{ 741{
742 return info <= SEND_SIG_PRIV; 742 return info <= SEND_SIG_PRIV;
743} 743}
744 744
745static inline bool si_fromuser(const struct siginfo *info) 745static inline bool si_fromuser(const struct kernel_siginfo *info)
746{ 746{
747 return info == SEND_SIG_NOINFO || 747 return info == SEND_SIG_NOINFO ||
748 (!is_si_special(info) && SI_FROMUSER(info)); 748 (!is_si_special(info) && SI_FROMUSER(info));
@@ -767,7 +767,7 @@ static bool kill_ok_by_cred(struct task_struct *t)
767 * Bad permissions for sending the signal 767 * Bad permissions for sending the signal
768 * - the caller must hold the RCU read lock 768 * - the caller must hold the RCU read lock
769 */ 769 */
770static int check_kill_permission(int sig, struct siginfo *info, 770static int check_kill_permission(int sig, struct kernel_siginfo *info,
771 struct task_struct *t) 771 struct task_struct *t)
772{ 772{
773 struct pid *sid; 773 struct pid *sid;
@@ -1010,7 +1010,7 @@ static inline bool legacy_queue(struct sigpending *signals, int sig)
1010} 1010}
1011 1011
1012#ifdef CONFIG_USER_NS 1012#ifdef CONFIG_USER_NS
1013static inline void userns_fixup_signal_uid(struct siginfo *info, struct task_struct *t) 1013static inline void userns_fixup_signal_uid(struct kernel_siginfo *info, struct task_struct *t)
1014{ 1014{
1015 if (current_user_ns() == task_cred_xxx(t, user_ns)) 1015 if (current_user_ns() == task_cred_xxx(t, user_ns))
1016 return; 1016 return;
@@ -1024,13 +1024,13 @@ static inline void userns_fixup_signal_uid(struct siginfo *info, struct task_str
1024 rcu_read_unlock(); 1024 rcu_read_unlock();
1025} 1025}
1026#else 1026#else
1027static inline void userns_fixup_signal_uid(struct siginfo *info, struct task_struct *t) 1027static inline void userns_fixup_signal_uid(struct kernel_siginfo *info, struct task_struct *t)
1028{ 1028{
1029 return; 1029 return;
1030} 1030}
1031#endif 1031#endif
1032 1032
1033static int __send_signal(int sig, struct siginfo *info, struct task_struct *t, 1033static int __send_signal(int sig, struct kernel_siginfo *info, struct task_struct *t,
1034 enum pid_type type, int from_ancestor_ns) 1034 enum pid_type type, int from_ancestor_ns)
1035{ 1035{
1036 struct sigpending *pending; 1036 struct sigpending *pending;
@@ -1150,7 +1150,7 @@ ret:
1150 return ret; 1150 return ret;
1151} 1151}
1152 1152
1153static int send_signal(int sig, struct siginfo *info, struct task_struct *t, 1153static int send_signal(int sig, struct kernel_siginfo *info, struct task_struct *t,
1154 enum pid_type type) 1154 enum pid_type type)
1155{ 1155{
1156 int from_ancestor_ns = 0; 1156 int from_ancestor_ns = 0;
@@ -1197,12 +1197,12 @@ static int __init setup_print_fatal_signals(char *str)
1197__setup("print-fatal-signals=", setup_print_fatal_signals); 1197__setup("print-fatal-signals=", setup_print_fatal_signals);
1198 1198
1199int 1199int
1200__group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p) 1200__group_send_sig_info(int sig, struct kernel_siginfo *info, struct task_struct *p)
1201{ 1201{
1202 return send_signal(sig, info, p, PIDTYPE_TGID); 1202 return send_signal(sig, info, p, PIDTYPE_TGID);
1203} 1203}
1204 1204
1205int do_send_sig_info(int sig, struct siginfo *info, struct task_struct *p, 1205int do_send_sig_info(int sig, struct kernel_siginfo *info, struct task_struct *p,
1206 enum pid_type type) 1206 enum pid_type type)
1207{ 1207{
1208 unsigned long flags; 1208 unsigned long flags;
@@ -1228,7 +1228,7 @@ int do_send_sig_info(int sig, struct siginfo *info, struct task_struct *p,
1228 * that is why we also clear SIGNAL_UNKILLABLE. 1228 * that is why we also clear SIGNAL_UNKILLABLE.
1229 */ 1229 */
1230int 1230int
1231force_sig_info(int sig, struct siginfo *info, struct task_struct *t) 1231force_sig_info(int sig, struct kernel_siginfo *info, struct task_struct *t)
1232{ 1232{
1233 unsigned long int flags; 1233 unsigned long int flags;
1234 int ret, blocked, ignored; 1234 int ret, blocked, ignored;
@@ -1316,8 +1316,8 @@ struct sighand_struct *__lock_task_sighand(struct task_struct *tsk,
1316/* 1316/*
1317 * send signal info to all the members of a group 1317 * send signal info to all the members of a group
1318 */ 1318 */
1319int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p, 1319int group_send_sig_info(int sig, struct kernel_siginfo *info,
1320 enum pid_type type) 1320 struct task_struct *p, enum pid_type type)
1321{ 1321{
1322 int ret; 1322 int ret;
1323 1323
@@ -1336,7 +1336,7 @@ int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p,
1336 * control characters do (^C, ^Z etc) 1336 * control characters do (^C, ^Z etc)
1337 * - the caller must hold at least a readlock on tasklist_lock 1337 * - the caller must hold at least a readlock on tasklist_lock
1338 */ 1338 */
1339int __kill_pgrp_info(int sig, struct siginfo *info, struct pid *pgrp) 1339int __kill_pgrp_info(int sig, struct kernel_siginfo *info, struct pid *pgrp)
1340{ 1340{
1341 struct task_struct *p = NULL; 1341 struct task_struct *p = NULL;
1342 int retval, success; 1342 int retval, success;
@@ -1351,7 +1351,7 @@ int __kill_pgrp_info(int sig, struct siginfo *info, struct pid *pgrp)
1351 return success ? 0 : retval; 1351 return success ? 0 : retval;
1352} 1352}
1353 1353
1354int kill_pid_info(int sig, struct siginfo *info, struct pid *pid) 1354int kill_pid_info(int sig, struct kernel_siginfo *info, struct pid *pid)
1355{ 1355{
1356 int error = -ESRCH; 1356 int error = -ESRCH;
1357 struct task_struct *p; 1357 struct task_struct *p;
@@ -1373,7 +1373,7 @@ int kill_pid_info(int sig, struct siginfo *info, struct pid *pid)
1373 } 1373 }
1374} 1374}
1375 1375
1376static int kill_proc_info(int sig, struct siginfo *info, pid_t pid) 1376static int kill_proc_info(int sig, struct kernel_siginfo *info, pid_t pid)
1377{ 1377{
1378 int error; 1378 int error;
1379 rcu_read_lock(); 1379 rcu_read_lock();
@@ -1394,7 +1394,7 @@ static inline bool kill_as_cred_perm(const struct cred *cred,
1394} 1394}
1395 1395
1396/* like kill_pid_info(), but doesn't use uid/euid of "current" */ 1396/* like kill_pid_info(), but doesn't use uid/euid of "current" */
1397int kill_pid_info_as_cred(int sig, struct siginfo *info, struct pid *pid, 1397int kill_pid_info_as_cred(int sig, struct kernel_siginfo *info, struct pid *pid,
1398 const struct cred *cred) 1398 const struct cred *cred)
1399{ 1399{
1400 int ret = -EINVAL; 1400 int ret = -EINVAL;
@@ -1438,7 +1438,7 @@ EXPORT_SYMBOL_GPL(kill_pid_info_as_cred);
1438 * is probably wrong. Should make it like BSD or SYSV. 1438 * is probably wrong. Should make it like BSD or SYSV.
1439 */ 1439 */
1440 1440
1441static int kill_something_info(int sig, struct siginfo *info, pid_t pid) 1441static int kill_something_info(int sig, struct kernel_siginfo *info, pid_t pid)
1442{ 1442{
1443 int ret; 1443 int ret;
1444 1444
@@ -1482,7 +1482,7 @@ static int kill_something_info(int sig, struct siginfo *info, pid_t pid)
1482 * These are for backward compatibility with the rest of the kernel source. 1482 * These are for backward compatibility with the rest of the kernel source.
1483 */ 1483 */
1484 1484
1485int send_sig_info(int sig, struct siginfo *info, struct task_struct *p) 1485int send_sig_info(int sig, struct kernel_siginfo *info, struct task_struct *p)
1486{ 1486{
1487 /* 1487 /*
1488 * Make sure legacy kernel users don't send in bad values 1488 * Make sure legacy kernel users don't send in bad values
@@ -1533,7 +1533,7 @@ int force_sig_fault(int sig, int code, void __user *addr
1533 ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr) 1533 ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr)
1534 , struct task_struct *t) 1534 , struct task_struct *t)
1535{ 1535{
1536 struct siginfo info; 1536 struct kernel_siginfo info;
1537 1537
1538 clear_siginfo(&info); 1538 clear_siginfo(&info);
1539 info.si_signo = sig; 1539 info.si_signo = sig;
@@ -1556,7 +1556,7 @@ int send_sig_fault(int sig, int code, void __user *addr
1556 ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr) 1556 ___ARCH_SI_IA64(int imm, unsigned int flags, unsigned long isr)
1557 , struct task_struct *t) 1557 , struct task_struct *t)
1558{ 1558{
1559 struct siginfo info; 1559 struct kernel_siginfo info;
1560 1560
1561 clear_siginfo(&info); 1561 clear_siginfo(&info);
1562 info.si_signo = sig; 1562 info.si_signo = sig;
@@ -1576,7 +1576,7 @@ int send_sig_fault(int sig, int code, void __user *addr
1576 1576
1577int force_sig_mceerr(int code, void __user *addr, short lsb, struct task_struct *t) 1577int force_sig_mceerr(int code, void __user *addr, short lsb, struct task_struct *t)
1578{ 1578{
1579 struct siginfo info; 1579 struct kernel_siginfo info;
1580 1580
1581 WARN_ON((code != BUS_MCEERR_AO) && (code != BUS_MCEERR_AR)); 1581 WARN_ON((code != BUS_MCEERR_AO) && (code != BUS_MCEERR_AR));
1582 clear_siginfo(&info); 1582 clear_siginfo(&info);
@@ -1590,7 +1590,7 @@ int force_sig_mceerr(int code, void __user *addr, short lsb, struct task_struct
1590 1590
1591int send_sig_mceerr(int code, void __user *addr, short lsb, struct task_struct *t) 1591int send_sig_mceerr(int code, void __user *addr, short lsb, struct task_struct *t)
1592{ 1592{
1593 struct siginfo info; 1593 struct kernel_siginfo info;
1594 1594
1595 WARN_ON((code != BUS_MCEERR_AO) && (code != BUS_MCEERR_AR)); 1595 WARN_ON((code != BUS_MCEERR_AO) && (code != BUS_MCEERR_AR));
1596 clear_siginfo(&info); 1596 clear_siginfo(&info);
@@ -1605,7 +1605,7 @@ EXPORT_SYMBOL(send_sig_mceerr);
1605 1605
1606int force_sig_bnderr(void __user *addr, void __user *lower, void __user *upper) 1606int force_sig_bnderr(void __user *addr, void __user *lower, void __user *upper)
1607{ 1607{
1608 struct siginfo info; 1608 struct kernel_siginfo info;
1609 1609
1610 clear_siginfo(&info); 1610 clear_siginfo(&info);
1611 info.si_signo = SIGSEGV; 1611 info.si_signo = SIGSEGV;
@@ -1620,7 +1620,7 @@ int force_sig_bnderr(void __user *addr, void __user *lower, void __user *upper)
1620#ifdef SEGV_PKUERR 1620#ifdef SEGV_PKUERR
1621int force_sig_pkuerr(void __user *addr, u32 pkey) 1621int force_sig_pkuerr(void __user *addr, u32 pkey)
1622{ 1622{
1623 struct siginfo info; 1623 struct kernel_siginfo info;
1624 1624
1625 clear_siginfo(&info); 1625 clear_siginfo(&info);
1626 info.si_signo = SIGSEGV; 1626 info.si_signo = SIGSEGV;
@@ -1637,7 +1637,7 @@ int force_sig_pkuerr(void __user *addr, u32 pkey)
1637 */ 1637 */
1638int force_sig_ptrace_errno_trap(int errno, void __user *addr) 1638int force_sig_ptrace_errno_trap(int errno, void __user *addr)
1639{ 1639{
1640 struct siginfo info; 1640 struct kernel_siginfo info;
1641 1641
1642 clear_siginfo(&info); 1642 clear_siginfo(&info);
1643 info.si_signo = SIGTRAP; 1643 info.si_signo = SIGTRAP;
@@ -1766,7 +1766,7 @@ ret:
1766 */ 1766 */
1767bool do_notify_parent(struct task_struct *tsk, int sig) 1767bool do_notify_parent(struct task_struct *tsk, int sig)
1768{ 1768{
1769 struct siginfo info; 1769 struct kernel_siginfo info;
1770 unsigned long flags; 1770 unsigned long flags;
1771 struct sighand_struct *psig; 1771 struct sighand_struct *psig;
1772 bool autoreap = false; 1772 bool autoreap = false;
@@ -1871,7 +1871,7 @@ bool do_notify_parent(struct task_struct *tsk, int sig)
1871static void do_notify_parent_cldstop(struct task_struct *tsk, 1871static void do_notify_parent_cldstop(struct task_struct *tsk,
1872 bool for_ptracer, int why) 1872 bool for_ptracer, int why)
1873{ 1873{
1874 struct siginfo info; 1874 struct kernel_siginfo info;
1875 unsigned long flags; 1875 unsigned long flags;
1876 struct task_struct *parent; 1876 struct task_struct *parent;
1877 struct sighand_struct *sighand; 1877 struct sighand_struct *sighand;
@@ -1971,7 +1971,7 @@ static bool sigkill_pending(struct task_struct *tsk)
1971 * If we actually decide not to stop at all because the tracer 1971 * If we actually decide not to stop at all because the tracer
1972 * is gone, we keep current->exit_code unless clear_code. 1972 * is gone, we keep current->exit_code unless clear_code.
1973 */ 1973 */
1974static void ptrace_stop(int exit_code, int why, int clear_code, siginfo_t *info) 1974static void ptrace_stop(int exit_code, int why, int clear_code, kernel_siginfo_t *info)
1975 __releases(&current->sighand->siglock) 1975 __releases(&current->sighand->siglock)
1976 __acquires(&current->sighand->siglock) 1976 __acquires(&current->sighand->siglock)
1977{ 1977{
@@ -2108,7 +2108,7 @@ static void ptrace_stop(int exit_code, int why, int clear_code, siginfo_t *info)
2108 2108
2109static void ptrace_do_notify(int signr, int exit_code, int why) 2109static void ptrace_do_notify(int signr, int exit_code, int why)
2110{ 2110{
2111 siginfo_t info; 2111 kernel_siginfo_t info;
2112 2112
2113 clear_siginfo(&info); 2113 clear_siginfo(&info);
2114 info.si_signo = signr; 2114 info.si_signo = signr;
@@ -2289,7 +2289,7 @@ static void do_jobctl_trap(void)
2289 } 2289 }
2290} 2290}
2291 2291
2292static int ptrace_signal(int signr, siginfo_t *info) 2292static int ptrace_signal(int signr, kernel_siginfo_t *info)
2293{ 2293{
2294 /* 2294 /*
2295 * We do not check sig_kernel_stop(signr) but set this marker 2295 * We do not check sig_kernel_stop(signr) but set this marker
@@ -2889,14 +2889,14 @@ enum siginfo_layout siginfo_layout(int sig, int si_code)
2889 return layout; 2889 return layout;
2890} 2890}
2891 2891
2892int copy_siginfo_to_user(siginfo_t __user *to, const siginfo_t *from) 2892int copy_siginfo_to_user(siginfo_t __user *to, const kernel_siginfo_t *from)
2893{ 2893{
2894 if (copy_to_user(to, from , sizeof(struct siginfo))) 2894 if (copy_to_user(to, from , sizeof(struct kernel_siginfo)))
2895 return -EFAULT; 2895 return -EFAULT;
2896 return 0; 2896 return 0;
2897} 2897}
2898 2898
2899int copy_siginfo_from_user(siginfo_t *to, const siginfo_t __user *from) 2899int copy_siginfo_from_user(kernel_siginfo_t *to, const siginfo_t __user *from)
2900{ 2900{
2901 if (copy_from_user(to, from, sizeof(struct siginfo))) 2901 if (copy_from_user(to, from, sizeof(struct siginfo)))
2902 return -EFAULT; 2902 return -EFAULT;
@@ -2905,13 +2905,13 @@ int copy_siginfo_from_user(siginfo_t *to, const siginfo_t __user *from)
2905 2905
2906#ifdef CONFIG_COMPAT 2906#ifdef CONFIG_COMPAT
2907int copy_siginfo_to_user32(struct compat_siginfo __user *to, 2907int copy_siginfo_to_user32(struct compat_siginfo __user *to,
2908 const struct siginfo *from) 2908 const struct kernel_siginfo *from)
2909#if defined(CONFIG_X86_X32_ABI) || defined(CONFIG_IA32_EMULATION) 2909#if defined(CONFIG_X86_X32_ABI) || defined(CONFIG_IA32_EMULATION)
2910{ 2910{
2911 return __copy_siginfo_to_user32(to, from, in_x32_syscall()); 2911 return __copy_siginfo_to_user32(to, from, in_x32_syscall());
2912} 2912}
2913int __copy_siginfo_to_user32(struct compat_siginfo __user *to, 2913int __copy_siginfo_to_user32(struct compat_siginfo __user *to,
2914 const struct siginfo *from, bool x32_ABI) 2914 const struct kernel_siginfo *from, bool x32_ABI)
2915#endif 2915#endif
2916{ 2916{
2917 struct compat_siginfo new; 2917 struct compat_siginfo new;
@@ -2995,7 +2995,7 @@ int __copy_siginfo_to_user32(struct compat_siginfo __user *to,
2995 return 0; 2995 return 0;
2996} 2996}
2997 2997
2998int copy_siginfo_from_user32(struct siginfo *to, 2998int copy_siginfo_from_user32(struct kernel_siginfo *to,
2999 const struct compat_siginfo __user *ufrom) 2999 const struct compat_siginfo __user *ufrom)
3000{ 3000{
3001 struct compat_siginfo from; 3001 struct compat_siginfo from;
@@ -3085,7 +3085,7 @@ int copy_siginfo_from_user32(struct siginfo *to,
3085 * @info: if non-null, the signal's siginfo is returned here 3085 * @info: if non-null, the signal's siginfo is returned here
3086 * @ts: upper bound on process time suspension 3086 * @ts: upper bound on process time suspension
3087 */ 3087 */
3088static int do_sigtimedwait(const sigset_t *which, siginfo_t *info, 3088static int do_sigtimedwait(const sigset_t *which, kernel_siginfo_t *info,
3089 const struct timespec *ts) 3089 const struct timespec *ts)
3090{ 3090{
3091 ktime_t *to = NULL, timeout = KTIME_MAX; 3091 ktime_t *to = NULL, timeout = KTIME_MAX;
@@ -3149,7 +3149,7 @@ SYSCALL_DEFINE4(rt_sigtimedwait, const sigset_t __user *, uthese,
3149{ 3149{
3150 sigset_t these; 3150 sigset_t these;
3151 struct timespec ts; 3151 struct timespec ts;
3152 siginfo_t info; 3152 kernel_siginfo_t info;
3153 int ret; 3153 int ret;
3154 3154
3155 /* XXX: Don't preclude handling different sized sigset_t's. */ 3155 /* XXX: Don't preclude handling different sized sigset_t's. */
@@ -3181,7 +3181,7 @@ COMPAT_SYSCALL_DEFINE4(rt_sigtimedwait, compat_sigset_t __user *, uthese,
3181{ 3181{
3182 sigset_t s; 3182 sigset_t s;
3183 struct timespec t; 3183 struct timespec t;
3184 siginfo_t info; 3184 kernel_siginfo_t info;
3185 long ret; 3185 long ret;
3186 3186
3187 if (sigsetsize != sizeof(sigset_t)) 3187 if (sigsetsize != sizeof(sigset_t))
@@ -3213,7 +3213,7 @@ COMPAT_SYSCALL_DEFINE4(rt_sigtimedwait, compat_sigset_t __user *, uthese,
3213 */ 3213 */
3214SYSCALL_DEFINE2(kill, pid_t, pid, int, sig) 3214SYSCALL_DEFINE2(kill, pid_t, pid, int, sig)
3215{ 3215{
3216 struct siginfo info; 3216 struct kernel_siginfo info;
3217 3217
3218 clear_siginfo(&info); 3218 clear_siginfo(&info);
3219 info.si_signo = sig; 3219 info.si_signo = sig;
@@ -3226,7 +3226,7 @@ SYSCALL_DEFINE2(kill, pid_t, pid, int, sig)
3226} 3226}
3227 3227
3228static int 3228static int
3229do_send_specific(pid_t tgid, pid_t pid, int sig, struct siginfo *info) 3229do_send_specific(pid_t tgid, pid_t pid, int sig, struct kernel_siginfo *info)
3230{ 3230{
3231 struct task_struct *p; 3231 struct task_struct *p;
3232 int error = -ESRCH; 3232 int error = -ESRCH;
@@ -3257,7 +3257,7 @@ do_send_specific(pid_t tgid, pid_t pid, int sig, struct siginfo *info)
3257 3257
3258static int do_tkill(pid_t tgid, pid_t pid, int sig) 3258static int do_tkill(pid_t tgid, pid_t pid, int sig)
3259{ 3259{
3260 struct siginfo info; 3260 struct kernel_siginfo info;
3261 3261
3262 clear_siginfo(&info); 3262 clear_siginfo(&info);
3263 info.si_signo = sig; 3263 info.si_signo = sig;
@@ -3304,7 +3304,7 @@ SYSCALL_DEFINE2(tkill, pid_t, pid, int, sig)
3304 return do_tkill(0, pid, sig); 3304 return do_tkill(0, pid, sig);
3305} 3305}
3306 3306
3307static int do_rt_sigqueueinfo(pid_t pid, int sig, siginfo_t *info) 3307static int do_rt_sigqueueinfo(pid_t pid, int sig, kernel_siginfo_t *info)
3308{ 3308{
3309 /* Not even root can pretend to send signals from the kernel. 3309 /* Not even root can pretend to send signals from the kernel.
3310 * Nor can they impersonate a kill()/tgkill(), which adds source info. 3310 * Nor can they impersonate a kill()/tgkill(), which adds source info.
@@ -3329,7 +3329,7 @@ static int do_rt_sigqueueinfo(pid_t pid, int sig, siginfo_t *info)
3329SYSCALL_DEFINE3(rt_sigqueueinfo, pid_t, pid, int, sig, 3329SYSCALL_DEFINE3(rt_sigqueueinfo, pid_t, pid, int, sig,
3330 siginfo_t __user *, uinfo) 3330 siginfo_t __user *, uinfo)
3331{ 3331{
3332 siginfo_t info; 3332 kernel_siginfo_t info;
3333 int ret = copy_siginfo_from_user(&info, uinfo); 3333 int ret = copy_siginfo_from_user(&info, uinfo);
3334 if (unlikely(ret)) 3334 if (unlikely(ret))
3335 return ret; 3335 return ret;
@@ -3342,7 +3342,7 @@ COMPAT_SYSCALL_DEFINE3(rt_sigqueueinfo,
3342 int, sig, 3342 int, sig,
3343 struct compat_siginfo __user *, uinfo) 3343 struct compat_siginfo __user *, uinfo)
3344{ 3344{
3345 siginfo_t info; 3345 kernel_siginfo_t info;
3346 int ret = copy_siginfo_from_user32(&info, uinfo); 3346 int ret = copy_siginfo_from_user32(&info, uinfo);
3347 if (unlikely(ret)) 3347 if (unlikely(ret))
3348 return ret; 3348 return ret;
@@ -3350,7 +3350,7 @@ COMPAT_SYSCALL_DEFINE3(rt_sigqueueinfo,
3350} 3350}
3351#endif 3351#endif
3352 3352
3353static int do_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig, siginfo_t *info) 3353static int do_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig, kernel_siginfo_t *info)
3354{ 3354{
3355 /* This is only valid for single tasks */ 3355 /* This is only valid for single tasks */
3356 if (pid <= 0 || tgid <= 0) 3356 if (pid <= 0 || tgid <= 0)
@@ -3372,7 +3372,7 @@ static int do_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig, siginfo_t *info)
3372SYSCALL_DEFINE4(rt_tgsigqueueinfo, pid_t, tgid, pid_t, pid, int, sig, 3372SYSCALL_DEFINE4(rt_tgsigqueueinfo, pid_t, tgid, pid_t, pid, int, sig,
3373 siginfo_t __user *, uinfo) 3373 siginfo_t __user *, uinfo)
3374{ 3374{
3375 siginfo_t info; 3375 kernel_siginfo_t info;
3376 int ret = copy_siginfo_from_user(&info, uinfo); 3376 int ret = copy_siginfo_from_user(&info, uinfo);
3377 if (unlikely(ret)) 3377 if (unlikely(ret))
3378 return ret; 3378 return ret;
@@ -3386,7 +3386,7 @@ COMPAT_SYSCALL_DEFINE4(rt_tgsigqueueinfo,
3386 int, sig, 3386 int, sig,
3387 struct compat_siginfo __user *, uinfo) 3387 struct compat_siginfo __user *, uinfo)
3388{ 3388{
3389 siginfo_t info; 3389 kernel_siginfo_t info;
3390 int ret = copy_siginfo_from_user32(&info, uinfo); 3390 int ret = copy_siginfo_from_user32(&info, uinfo);
3391 if (unlikely(ret)) 3391 if (unlikely(ret))
3392 return ret; 3392 return ret;
@@ -3968,10 +3968,57 @@ __weak const char *arch_vma_name(struct vm_area_struct *vma)
3968 return NULL; 3968 return NULL;
3969} 3969}
3970 3970
3971void __init signals_init(void) 3971static inline void siginfo_buildtime_checks(void)
3972{ 3972{
3973 BUILD_BUG_ON(sizeof(struct siginfo) != SI_MAX_SIZE); 3973 BUILD_BUG_ON(sizeof(struct siginfo) != SI_MAX_SIZE);
3974 3974
3975 /* Verify the offsets in the two siginfos match */
3976#define CHECK_OFFSET(field) \
3977 BUILD_BUG_ON(offsetof(siginfo_t, field) != offsetof(kernel_siginfo_t, field))
3978
3979 /* kill */
3980 CHECK_OFFSET(si_pid);
3981 CHECK_OFFSET(si_uid);
3982
3983 /* timer */
3984 CHECK_OFFSET(si_tid);
3985 CHECK_OFFSET(si_overrun);
3986 CHECK_OFFSET(si_value);
3987
3988 /* rt */
3989 CHECK_OFFSET(si_pid);
3990 CHECK_OFFSET(si_uid);
3991 CHECK_OFFSET(si_value);
3992
3993 /* sigchld */
3994 CHECK_OFFSET(si_pid);
3995 CHECK_OFFSET(si_uid);
3996 CHECK_OFFSET(si_status);
3997 CHECK_OFFSET(si_utime);
3998 CHECK_OFFSET(si_stime);
3999
4000 /* sigfault */
4001 CHECK_OFFSET(si_addr);
4002 CHECK_OFFSET(si_addr_lsb);
4003 CHECK_OFFSET(si_lower);
4004 CHECK_OFFSET(si_upper);
4005 CHECK_OFFSET(si_pkey);
4006
4007 /* sigpoll */
4008 CHECK_OFFSET(si_band);
4009 CHECK_OFFSET(si_fd);
4010
4011 /* sigsys */
4012 CHECK_OFFSET(si_call_addr);
4013 CHECK_OFFSET(si_syscall);
4014 CHECK_OFFSET(si_arch);
4015#undef CHECK_OFFSET
4016}
4017
4018void __init signals_init(void)
4019{
4020 siginfo_buildtime_checks();
4021
3975 sigqueue_cachep = KMEM_CACHE(sigqueue, SLAB_PANIC); 4022 sigqueue_cachep = KMEM_CACHE(sigqueue, SLAB_PANIC);
3976} 4023}
3977 4024
diff --git a/kernel/time/posix-timers.c b/kernel/time/posix-timers.c
index 4b9127e95430..eabb4c22728d 100644
--- a/kernel/time/posix-timers.c
+++ b/kernel/time/posix-timers.c
@@ -308,7 +308,7 @@ static void common_hrtimer_rearm(struct k_itimer *timr)
308 * To protect against the timer going away while the interrupt is queued, 308 * To protect against the timer going away while the interrupt is queued,
309 * we require that the it_requeue_pending flag be set. 309 * we require that the it_requeue_pending flag be set.
310 */ 310 */
311void posixtimer_rearm(struct siginfo *info) 311void posixtimer_rearm(struct kernel_siginfo *info)
312{ 312{
313 struct k_itimer *timr; 313 struct k_itimer *timr;
314 unsigned long flags; 314 unsigned long flags;
diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c
index 8b8b70620bbe..cbcb8ba51142 100644
--- a/security/apparmor/lsm.c
+++ b/security/apparmor/lsm.c
@@ -732,7 +732,7 @@ static int apparmor_task_setrlimit(struct task_struct *task,
732 return error; 732 return error;
733} 733}
734 734
735static int apparmor_task_kill(struct task_struct *target, struct siginfo *info, 735static int apparmor_task_kill(struct task_struct *target, struct kernel_siginfo *info,
736 int sig, const struct cred *cred) 736 int sig, const struct cred *cred)
737{ 737{
738 struct aa_label *cl, *tl; 738 struct aa_label *cl, *tl;
diff --git a/security/security.c b/security/security.c
index 736e78da1ab9..0d504fceda8b 100644
--- a/security/security.c
+++ b/security/security.c
@@ -1147,7 +1147,7 @@ int security_task_movememory(struct task_struct *p)
1147 return call_int_hook(task_movememory, 0, p); 1147 return call_int_hook(task_movememory, 0, p);
1148} 1148}
1149 1149
1150int security_task_kill(struct task_struct *p, struct siginfo *info, 1150int security_task_kill(struct task_struct *p, struct kernel_siginfo *info,
1151 int sig, const struct cred *cred) 1151 int sig, const struct cred *cred)
1152{ 1152{
1153 return call_int_hook(task_kill, 0, p, info, sig, cred); 1153 return call_int_hook(task_kill, 0, p, info, sig, cred);
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index ad9a9b8e9979..1b500b4c78a7 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -4186,7 +4186,7 @@ static int selinux_task_movememory(struct task_struct *p)
4186 PROCESS__SETSCHED, NULL); 4186 PROCESS__SETSCHED, NULL);
4187} 4187}
4188 4188
4189static int selinux_task_kill(struct task_struct *p, struct siginfo *info, 4189static int selinux_task_kill(struct task_struct *p, struct kernel_siginfo *info,
4190 int sig, const struct cred *cred) 4190 int sig, const struct cred *cred)
4191{ 4191{
4192 u32 secid; 4192 u32 secid;
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
index 340fc30ad85d..025de76af1db 100644
--- a/security/smack/smack_lsm.c
+++ b/security/smack/smack_lsm.c
@@ -2251,7 +2251,7 @@ static int smack_task_movememory(struct task_struct *p)
2251 * Return 0 if write access is permitted 2251 * Return 0 if write access is permitted
2252 * 2252 *
2253 */ 2253 */
2254static int smack_task_kill(struct task_struct *p, struct siginfo *info, 2254static int smack_task_kill(struct task_struct *p, struct kernel_siginfo *info,
2255 int sig, const struct cred *cred) 2255 int sig, const struct cred *cred)
2256{ 2256{
2257 struct smk_audit_info ad; 2257 struct smk_audit_info ad;