[PATCH v2 01/20] compat: Add generic compat_siginfo_t
From: Amanieu d'Antras <hidden>
Date: 2015-11-05 00:57:51
Also in:
linux-mips, linux-s390, linuxppc-dev, lkml, sparclinux
Subsystem:
arm64 port (aarch64 architecture), linux for powerpc (32-bit and 64-bit), mips, parisc architecture, s390 architecture, sparc + ultrasparc (sparc/sparc64), the rest, x86 architecture (32-bit and 64-bit) · Maintainers:
Catalin Marinas, Will Deacon, Madhavan Srinivasan, Michael Ellerman, Thomas Bogendoerfer, "James E.J. Bottomley", Helge Deller, Heiko Carstens, Vasily Gorbik, Alexander Gordeev, "David S. Miller", Andreas Larsson, Linus Torvalds, Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen
This matches the normal siginfo_t as closely as possible, unlike some architecture-specific versions which are missing some fields. Signed-off-by: Amanieu d'Antras <redacted> --- arch/arm64/include/asm/compat.h | 2 ++ arch/mips/include/asm/compat.h | 1 + arch/parisc/include/asm/compat.h | 2 ++ arch/powerpc/include/asm/compat.h | 1 + arch/s390/include/asm/compat.h | 2 ++ arch/sparc/include/asm/compat.h | 1 + arch/tile/include/asm/compat.h | 1 + arch/x86/include/asm/compat.h | 2 ++ include/linux/compat.h | 66 ++++++++++++++++++++++++++++++++++++++- 9 files changed, 77 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/include/asm/compat.h b/arch/arm64/include/asm/compat.h
index 7fbed69..ff4e294 100644
--- a/arch/arm64/include/asm/compat.h
+++ b/arch/arm64/include/asm/compat.h@@ -155,6 +155,8 @@ typedef union compat_sigval { compat_uptr_t sival_ptr; } compat_sigval_t; +#define HAVE_ARCH_COMPAT_SIGINFO_T + typedef struct compat_siginfo { int si_signo; int si_errno;
diff --git a/arch/mips/include/asm/compat.h b/arch/mips/include/asm/compat.h
index c4bd54a..5f1f816 100644
--- a/arch/mips/include/asm/compat.h
+++ b/arch/mips/include/asm/compat.h@@ -130,6 +130,7 @@ typedef union compat_sigval { compat_uptr_t sival_ptr; } compat_sigval_t; +#define HAVE_ARCH_COMPAT_SIGINFO_T #define SI_PAD_SIZE32 (128/sizeof(int) - 3) typedef struct compat_siginfo {
diff --git a/arch/parisc/include/asm/compat.h b/arch/parisc/include/asm/compat.h
index 94710cf..e0be05f 100644
--- a/arch/parisc/include/asm/compat.h
+++ b/arch/parisc/include/asm/compat.h@@ -134,6 +134,8 @@ typedef union compat_sigval { compat_uptr_t sival_ptr; } compat_sigval_t; +#define HAVE_ARCH_COMPAT_SIGINFO_T + typedef struct compat_siginfo { int si_signo; int si_errno;
diff --git a/arch/powerpc/include/asm/compat.h b/arch/powerpc/include/asm/compat.h
index 4f2df58..75b25ff 100644
--- a/arch/powerpc/include/asm/compat.h
+++ b/arch/powerpc/include/asm/compat.h@@ -124,6 +124,7 @@ typedef union compat_sigval { compat_uptr_t sival_ptr; } compat_sigval_t; +#define HAVE_ARCH_COMPAT_SIGINFO_T #define SI_PAD_SIZE32 (128/sizeof(int) - 3) typedef struct compat_siginfo {
diff --git a/arch/s390/include/asm/compat.h b/arch/s390/include/asm/compat.h
index d350ed9..ac73ac7 100644
--- a/arch/s390/include/asm/compat.h
+++ b/arch/s390/include/asm/compat.h@@ -192,6 +192,8 @@ typedef union compat_sigval { compat_uptr_t sival_ptr; } compat_sigval_t; +#define HAVE_ARCH_COMPAT_SIGINFO_T + typedef struct compat_siginfo { int si_signo; int si_errno;
diff --git a/arch/sparc/include/asm/compat.h b/arch/sparc/include/asm/compat.h
index 830502fe..0c80f59 100644
--- a/arch/sparc/include/asm/compat.h
+++ b/arch/sparc/include/asm/compat.h@@ -153,6 +153,7 @@ typedef union compat_sigval { compat_uptr_t sival_ptr; } compat_sigval_t; +#define HAVE_ARCH_COMPAT_SIGINFO_T #define SI_PAD_SIZE32 (128/sizeof(int) - 3) typedef struct compat_siginfo {
diff --git a/arch/tile/include/asm/compat.h b/arch/tile/include/asm/compat.h
index c14e36f..f9bba8d 100644
--- a/arch/tile/include/asm/compat.h
+++ b/arch/tile/include/asm/compat.h@@ -115,6 +115,7 @@ typedef union compat_sigval { compat_uptr_t sival_ptr; } compat_sigval_t; +#define HAVE_ARCH_COMPAT_SIGINFO_T #define COMPAT_SI_PAD_SIZE (128/sizeof(int) - 3) typedef struct compat_siginfo {
diff --git a/arch/x86/include/asm/compat.h b/arch/x86/include/asm/compat.h
index acdee09..69176b4 100644
--- a/arch/x86/include/asm/compat.h
+++ b/arch/x86/include/asm/compat.h@@ -130,6 +130,8 @@ typedef union compat_sigval { compat_uptr_t sival_ptr; } compat_sigval_t; +#define HAVE_ARCH_COMPAT_SIGINFO_T + typedef struct compat_siginfo { int si_signo; int si_errno;
diff --git a/include/linux/compat.h b/include/linux/compat.h
index a76c917..e51574c 100644
--- a/include/linux/compat.h
+++ b/include/linux/compat.h@@ -196,7 +196,71 @@ struct compat_rusage { extern int put_compat_rusage(const struct rusage *, struct compat_rusage __user *); -struct compat_siginfo; +#ifndef HAVE_ARCH_COMPAT_SIGINFO_T +typedef struct compat_siginfo { + int si_signo; + int si_errno; + int si_code; + + union { + int _pad[128 / sizeof(int) - 3]; + + /* kill() */ + struct { + compat_pid_t _pid; /* sender's pid */ + compat_uid_t _uid; /* sender's uid */ + } _kill; + + /* POSIX.1b timers */ + struct { + compat_timer_t _tid; /* timer id */ + int _overrun; /* overrun count */ + compat_sigval_t _sigval; /* same as below */ + } _timer; + + /* POSIX.1b signals */ + struct { + compat_pid_t _pid; /* sender's pid */ + compat_uid_t _uid; /* sender's uid */ + compat_sigval_t _sigval; + } _rt; + + /* SIGCHLD */ + struct { + compat_pid_t _pid; /* which child */ + compat_uid_t _uid; /* sender's uid */ + int _status; /* exit code */ + compat_clock_t _utime; + compat_clock_t _stime; + } _sigchld; + + /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ + struct { + compat_uptr_t _addr; /* faulting insn/memory ref. */ +#ifdef __ARCH_SI_TRAPNO + int _trapno; /* TRAP # which caused the signal */ +#endif + short _addr_lsb; /* LSB of the reported address */ + struct { + compat_uptr_t _lower; + compat_uptr_t _upper; + } _addr_bnd; + } _sigfault; + + /* SIGPOLL */ + struct { + compat_long_t _band; /* POLL_IN, POLL_OUT, POLL_MSG */ + int _fd; + } _sigpoll; + + struct { + compat_uptr_t _call_addr; /* calling insn */ + int _syscall; /* triggering system call number */ + compat_uint_t _arch; /* AUDIT_ARCH_* of syscall */ + } _sigsys; + } _sifields; +} compat_siginfo_t; +#endif extern asmlinkage long compat_sys_waitid(int, compat_pid_t, struct compat_siginfo __user *, int,
--
2.6.2