diff options
| author | David Howells <dhowells@redhat.com> | 2013-03-19 10:00:53 -0400 |
|---|---|---|
| committer | Ralf Baechle <ralf@linux-mips.org> | 2013-03-19 14:15:52 -0400 |
| commit | 2a1486981c1317dc4f4aad568f2cc6e49dfb8c82 (patch) | |
| tree | daaac9cc2b216519c2c456450344b7e5c66c01de /include/linux | |
| parent | 1762c5ab7ce5f482aafaf9b6a721e41f073ae3cb (diff) | |
Fix breakage in MIPS siginfo handling
MIPS's siginfo handling has been broken since this commit:
commit 574c4866e33d648520a8bd5bf6f573ea6e554e88
Author: Al Viro <viro@zeniv.linux.org.uk>
Date: Sun Nov 25 22:24:19 2012 -0500
consolidate kernel-side struct sigaction declarations
for 64-bit BE MIPS CPUs.
The UAPI variant looks like this:
struct sigaction {
unsigned int sa_flags;
__sighandler_t sa_handler;
sigset_t sa_mask;
};
but the core kernel's variant looks like this:
struct sigaction {
#ifndef __ARCH_HAS_ODD_SIGACTION
__sighandler_t sa_handler;
unsigned long sa_flags;
#else
unsigned long sa_flags;
__sighandler_t sa_handler;
#endif
#ifdef __ARCH_HAS_SA_RESTORER
__sigrestore_t sa_restorer;
#endif
sigset_t sa_mask;
};
The problem is that sa_flags has been changed from an unsigned int to an
unsigned long.
Fix this by making sa_flags unsigned int if __ARCH_HAS_ODD_SIGACTION is
defined.
Whilst we're at it, rename __ARCH_HAS_ODD_SIGACTION to
__ARCH_HAS_IRIX_SIGACTION.
Signed-off-by: David Howells <dhowells@redhat.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Cc: stable@vger.kernel.org
Acked-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/compat.h | 4 | ||||
| -rw-r--r-- | include/linux/signal.h | 4 |
2 files changed, 4 insertions, 4 deletions
diff --git a/include/linux/compat.h b/include/linux/compat.h index 76a87fb57ac2..377cd8c3395e 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h | |||
| @@ -141,11 +141,11 @@ typedef struct { | |||
| 141 | } compat_sigset_t; | 141 | } compat_sigset_t; |
| 142 | 142 | ||
| 143 | struct compat_sigaction { | 143 | struct compat_sigaction { |
| 144 | #ifndef __ARCH_HAS_ODD_SIGACTION | 144 | #ifndef __ARCH_HAS_IRIX_SIGACTION |
| 145 | compat_uptr_t sa_handler; | 145 | compat_uptr_t sa_handler; |
| 146 | compat_ulong_t sa_flags; | 146 | compat_ulong_t sa_flags; |
| 147 | #else | 147 | #else |
| 148 | compat_ulong_t sa_flags; | 148 | compat_uint_t sa_flags; |
| 149 | compat_uptr_t sa_handler; | 149 | compat_uptr_t sa_handler; |
| 150 | #endif | 150 | #endif |
| 151 | #ifdef __ARCH_HAS_SA_RESTORER | 151 | #ifdef __ARCH_HAS_SA_RESTORER |
diff --git a/include/linux/signal.h b/include/linux/signal.h index a2dcb94ea49d..9475c5cb28bc 100644 --- a/include/linux/signal.h +++ b/include/linux/signal.h | |||
| @@ -250,11 +250,11 @@ extern int show_unhandled_signals; | |||
| 250 | extern int sigsuspend(sigset_t *); | 250 | extern int sigsuspend(sigset_t *); |
| 251 | 251 | ||
| 252 | struct sigaction { | 252 | struct sigaction { |
| 253 | #ifndef __ARCH_HAS_ODD_SIGACTION | 253 | #ifndef __ARCH_HAS_IRIX_SIGACTION |
| 254 | __sighandler_t sa_handler; | 254 | __sighandler_t sa_handler; |
| 255 | unsigned long sa_flags; | 255 | unsigned long sa_flags; |
| 256 | #else | 256 | #else |
| 257 | unsigned long sa_flags; | 257 | unsigned int sa_flags; |
| 258 | __sighandler_t sa_handler; | 258 | __sighandler_t sa_handler; |
| 259 | #endif | 259 | #endif |
| 260 | #ifdef __ARCH_HAS_SA_RESTORER | 260 | #ifdef __ARCH_HAS_SA_RESTORER |
