From patchwork Thu Nov 5 00:50:20 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amanieu d'Antras X-Patchwork-Id: 7556271 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 79BF7BEEA4 for ; Thu, 5 Nov 2015 00:54:20 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 7FD5D206B7 for ; Thu, 5 Nov 2015 00:54:19 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 80CAD2068D for ; Thu, 5 Nov 2015 00:54:18 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1Zu8mh-0003oH-FH; Thu, 05 Nov 2015 00:52:11 +0000 Received: from mail-wm0-x242.google.com ([2a00:1450:400c:c09::242]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1Zu8mW-0003Y9-A1 for linux-arm-kernel@lists.infradead.org; Thu, 05 Nov 2015 00:52:01 +0000 Received: by wmec75 with SMTP id c75so41629wme.3 for ; Wed, 04 Nov 2015 16:51:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=02+IDgPS9iLA3p4ZUv+MIAD5+TAh44vVnvEiocJAYWw=; b=KagN8kniQHfghBb+IdZ33eb6fAf8Ap2YKa+jsaLe47viNaOY6BJAannAyr0jPPPHiW 6F035C3j9aPdJ6MXZPsDR8h4MiJ7IHOEKPhUpLAeAw21raTTakTHcFebkK2NsBFXfW8x R8t1dFmHHtlaYrPjA4LFQdvsGKAnaM8XrYUB7wAxjiDMkbWG5AOn6LgQfiKRXOzsekxg w/gdIDJwhgrfHwvr0HrrX0Yz9VrdCfh65HDzkHIVnMwuToWARm4UKr/7X8RQqe2PZzky uodk+5KvAxz+PIc/I1d9rvwDxn2hpeOvtXQYiZkS95xrNeuT9PUUngg1jnxQIXHoG0hL CQkA== X-Received: by 10.28.6.206 with SMTP id 197mr60499wmg.102.1446684698571; Wed, 04 Nov 2015 16:51:38 -0800 (PST) Received: from amanieu-laptop.wireless.ropemaker.crm.lan ([31.205.92.76]) by smtp.gmail.com with ESMTPSA id 194sm5558927wmh.19.2015.11.04.16.51.37 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 04 Nov 2015 16:51:38 -0800 (PST) From: Amanieu d'Antras To: linux-kernel@vger.kernel.org Subject: [PATCH v2 01/20] compat: Add generic compat_siginfo_t Date: Thu, 5 Nov 2015 00:50:20 +0000 Message-Id: <1446684640-4112-2-git-send-email-amanieu@gmail.com> X-Mailer: git-send-email 2.6.2 In-Reply-To: <1446684640-4112-1-git-send-email-amanieu@gmail.com> References: <1446684640-4112-1-git-send-email-amanieu@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20151104_165200_651550_AE9EACDF X-CRM114-Status: GOOD ( 15.20 ) X-Spam-Score: -2.0 (--) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-mips@linux-mips.org, Catalin Marinas , Heiko Carstens , Chris Metcalf , Paul Mackerras , "H. Peter Anvin" , sparclinux@vger.kernel.org, linux-s390@vger.kernel.org, Michael Ellerman , Helge Deller , x86@kernel.org, "James E.J. Bottomley" , Ingo Molnar , Benjamin Herrenschmidt , Will Deacon , Thomas Gleixner , linux-arm-kernel@lists.infradead.org, Amanieu d'Antras , linux-parisc@vger.kernel.org, Oleg Nesterov , Ralf Baechle , Martin Schwidefsky , linuxppc-dev@lists.ozlabs.org, "David S. Miller" MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, T_DKIM_INVALID, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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 --- 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,