The current handling of compat_siginfo_t is a mess: each architecture has its own implementation, all of which are incorrect in different ways. This patch series replaces all of the arch-specific versions with a single generic one that is guaranteed to produce the same results as a 32-bit kernel.
Most architectures are able to use the generic compat_siginfo_t, except x86 and MIPS. MIPS uses a slightly different compat_siginfo_t structure for ABI reasons but can still use the generic copy_siginfo_{to,from}_user32. x86 can't use the generic versions because it needs special handling for __SI_CHLD for x32 tasks. One issue that isn't resolved in this series is sending signals between a 32-bit process and 64-bit process. Sending a si_int will work correctly, but a si_ptr value will likely get corrupted due to the different layouts of the 32-bit and 64-bit siginfo_t structures. signalfd_copyinfo was also modified to properly generate data for compat tasks. In particular the ssi_ptr and ssi_data members need to be sign-extended to 64 bits rather than zero-extended, since that is the behavior in 32-bit kernels. This series has been tested on x86_64 and arm64. Amanieu d'Antras (20): compat: Add generic compat_siginfo_t compat: Add generic copy_siginfo_{to,from}_user32 x86: Update compat_siginfo_t to be closer to the generic version x86: Rewrite copy_siginfo_{to,from}_user32 mips: Clean up compat_siginfo_t mips: Use generic copy_siginfo_{to,from}_user32 arm64: Use generic compat_siginfo_t arm64: Use generic copy_siginfo_{to,from}_user32 parisc: Use generic compat_siginfo_t parsic: Use generic copy_siginfo_{to,from}_user32 s390: Use generic compat_siginfo_t s390: Use generic copy_siginfo_{to,from}_user32 powerpc: Use generic compat_siginfo_t powerpc: Use generic copy_siginfo_{to,from}_user32 tile: Use generic compat_siginfo_t tile: Use generic copy_siginfo_{to,from}_user32 sparc: Use generic compat_siginfo_t sparc: Use generic copy_siginfo_{to,from}_user32 signalfd: Fix some issues in signalfd_copyinfo signal: Remove unnecessary zero-initialization of siginfo_t arch/arm64/include/asm/compat.h | 59 --------- arch/arm64/kernel/signal32.c | 85 ------------ arch/mips/include/asm/compat.h | 63 +++++---- arch/mips/kernel/signal32.c | 62 --------- arch/parisc/include/asm/compat.h | 52 -------- arch/parisc/kernel/signal32.c | 102 --------------- arch/powerpc/include/asm/compat.h | 60 --------- arch/powerpc/kernel/signal_32.c | 72 +--------- arch/s390/include/asm/compat.h | 51 -------- arch/s390/kernel/compat_signal.c | 102 --------------- arch/sparc/include/asm/compat.h | 54 -------- arch/sparc/kernel/signal32.c | 69 ---------- arch/tile/include/asm/compat.h | 57 -------- arch/tile/kernel/compat_signal.c | 75 ----------- arch/x86/include/asm/compat.h | 39 ++++-- arch/x86/kernel/signal_compat.c | 269 +++++++++++++++++++++++++++----------- fs/signalfd.c | 58 +++++--- include/linux/compat.h | 66 +++++++++- kernel/compat.c | 204 +++++++++++++++++++++++++++++ kernel/ptrace.c | 1 - kernel/signal.c | 16 ++- 21 files changed, 574 insertions(+), 1042 deletions(-) -- 2.6.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/