From: Peter Collingbourne <pcc@google.com> To: Catalin Marinas <catalin.marinas@arm.com>, Evgenii Stepanov <eugenis@google.com>, Kostya Serebryany <kcc@google.com>, Vincenzo Frascino <vincenzo.frascino@arm.com>, Dave Martin <Dave.Martin@arm.com>, Will Deacon <will@kernel.org>, Oleg Nesterov <oleg@redhat.com>, "Eric W. Biederman" <ebiederm@xmission.com>, "James E.J. Bottomley" <James.Bottomley@hansenpartnership.com> Cc: Peter Collingbourne <pcc@google.com>, Linux ARM <linux-arm-kernel@lists.infradead.org>, Kevin Brodsky <kevin.brodsky@arm.com>, Andrey Konovalov <andreyknvl@google.com>, Richard Henderson <rth@twiddle.net>, linux-api@vger.kernel.org, Helge Deller <deller@gmx.de>, David Spickett <david.spickett@linaro.org> Subject: [PATCH v14 6/8] signal: define the SA_UNSUPPORTED bit in sa_flags Date: Wed, 4 Nov 2020 13:18:09 -0800 [thread overview] Message-ID: <87501c1e71b5a6ed96bb9b540718b0752d4d6fed.1604523707.git.pcc@google.com> (raw) In-Reply-To: <cover.1604523707.git.pcc@google.com> Define a sa_flags bit, SA_UNSUPPORTED, which will never be supported in the uapi. The purpose of this flag bit is to allow userspace to distinguish an old kernel that does not clear unknown sa_flags bits from a kernel that supports every flag bit. In other words, if userspace does something like: act.sa_flags |= SA_UNSUPPORTED; sigaction(SIGSEGV, &act, 0); sigaction(SIGSEGV, 0, &oldact); and finds that SA_UNSUPPORTED remains set in oldact.sa_flags, it means that the kernel cannot be trusted to have cleared unknown flag bits from sa_flags, so no assumptions about flag bit support can be made. Signed-off-by: Peter Collingbourne <pcc@google.com> Reviewed-by: Dave Martin <Dave.Martin@arm.com> Link: https://linux-review.googlesource.com/id/Ic2501ad150a3a79c1cf27fb8c99be342e9dffbcb --- v11: - clarify the commit message include/uapi/asm-generic/signal-defs.h | 7 +++++++ kernel/signal.c | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/include/uapi/asm-generic/signal-defs.h b/include/uapi/asm-generic/signal-defs.h index 493953fe319b..0126ebda4d31 100644 --- a/include/uapi/asm-generic/signal-defs.h +++ b/include/uapi/asm-generic/signal-defs.h @@ -14,6 +14,12 @@ * SA_RESTART flag to get restarting signals (which were the default long ago) * SA_NODEFER prevents the current signal from being masked in the handler. * SA_RESETHAND clears the handler when the signal is delivered. + * SA_UNSUPPORTED is a flag bit that will never be supported. Kernels from + * before the introduction of SA_UNSUPPORTED did not clear unknown bits from + * sa_flags when read using the oldact argument to sigaction and rt_sigaction, + * so this bit allows flag bit support to be detected from userspace while + * allowing an old kernel to be distinguished from a kernel that supports every + * flag bit. * * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single * Unix names RESETHAND and NODEFER respectively. @@ -42,6 +48,7 @@ #ifndef SA_RESETHAND #define SA_RESETHAND 0x80000000 #endif +#define SA_UNSUPPORTED 0x00000400 #define SA_NOMASK SA_NODEFER #define SA_ONESHOT SA_RESETHAND diff --git a/kernel/signal.c b/kernel/signal.c index 832b654dee8c..d18930aafbf4 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -3964,6 +3964,12 @@ int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact) if (oact) *oact = *k; + /* + * Make sure that we never accidentally claim to support SA_UNSUPPORTED, + * e.g. by having an architecture use the bit in their uapi. + */ + BUILD_BUG_ON(UAPI_SA_FLAGS & SA_UNSUPPORTED); + /* * Clear unknown flag bits in order to allow userspace to detect missing * support for flag bits and to allow the kernel to use non-uapi bits -- 2.29.1.341.ge80a0c044ae-goog
WARNING: multiple messages have this Message-ID (diff)
From: Peter Collingbourne <pcc@google.com> To: Catalin Marinas <catalin.marinas@arm.com>, Evgenii Stepanov <eugenis@google.com>, Kostya Serebryany <kcc@google.com>, Vincenzo Frascino <vincenzo.frascino@arm.com>, Dave Martin <Dave.Martin@arm.com>, Will Deacon <will@kernel.org>, Oleg Nesterov <oleg@redhat.com>, "Eric W. Biederman" <ebiederm@xmission.com>, "James E.J. Bottomley" <James.Bottomley@hansenpartnership.com> Cc: Andrey Konovalov <andreyknvl@google.com>, Helge Deller <deller@gmx.de>, Kevin Brodsky <kevin.brodsky@arm.com>, linux-api@vger.kernel.org, David Spickett <david.spickett@linaro.org>, Peter Collingbourne <pcc@google.com>, Linux ARM <linux-arm-kernel@lists.infradead.org>, Richard Henderson <rth@twiddle.net> Subject: [PATCH v14 6/8] signal: define the SA_UNSUPPORTED bit in sa_flags Date: Wed, 4 Nov 2020 13:18:09 -0800 [thread overview] Message-ID: <87501c1e71b5a6ed96bb9b540718b0752d4d6fed.1604523707.git.pcc@google.com> (raw) In-Reply-To: <cover.1604523707.git.pcc@google.com> Define a sa_flags bit, SA_UNSUPPORTED, which will never be supported in the uapi. The purpose of this flag bit is to allow userspace to distinguish an old kernel that does not clear unknown sa_flags bits from a kernel that supports every flag bit. In other words, if userspace does something like: act.sa_flags |= SA_UNSUPPORTED; sigaction(SIGSEGV, &act, 0); sigaction(SIGSEGV, 0, &oldact); and finds that SA_UNSUPPORTED remains set in oldact.sa_flags, it means that the kernel cannot be trusted to have cleared unknown flag bits from sa_flags, so no assumptions about flag bit support can be made. Signed-off-by: Peter Collingbourne <pcc@google.com> Reviewed-by: Dave Martin <Dave.Martin@arm.com> Link: https://linux-review.googlesource.com/id/Ic2501ad150a3a79c1cf27fb8c99be342e9dffbcb --- v11: - clarify the commit message include/uapi/asm-generic/signal-defs.h | 7 +++++++ kernel/signal.c | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/include/uapi/asm-generic/signal-defs.h b/include/uapi/asm-generic/signal-defs.h index 493953fe319b..0126ebda4d31 100644 --- a/include/uapi/asm-generic/signal-defs.h +++ b/include/uapi/asm-generic/signal-defs.h @@ -14,6 +14,12 @@ * SA_RESTART flag to get restarting signals (which were the default long ago) * SA_NODEFER prevents the current signal from being masked in the handler. * SA_RESETHAND clears the handler when the signal is delivered. + * SA_UNSUPPORTED is a flag bit that will never be supported. Kernels from + * before the introduction of SA_UNSUPPORTED did not clear unknown bits from + * sa_flags when read using the oldact argument to sigaction and rt_sigaction, + * so this bit allows flag bit support to be detected from userspace while + * allowing an old kernel to be distinguished from a kernel that supports every + * flag bit. * * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single * Unix names RESETHAND and NODEFER respectively. @@ -42,6 +48,7 @@ #ifndef SA_RESETHAND #define SA_RESETHAND 0x80000000 #endif +#define SA_UNSUPPORTED 0x00000400 #define SA_NOMASK SA_NODEFER #define SA_ONESHOT SA_RESETHAND diff --git a/kernel/signal.c b/kernel/signal.c index 832b654dee8c..d18930aafbf4 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -3964,6 +3964,12 @@ int do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact) if (oact) *oact = *k; + /* + * Make sure that we never accidentally claim to support SA_UNSUPPORTED, + * e.g. by having an architecture use the bit in their uapi. + */ + BUILD_BUG_ON(UAPI_SA_FLAGS & SA_UNSUPPORTED); + /* * Clear unknown flag bits in order to allow userspace to detect missing * support for flag bits and to allow the kernel to use non-uapi bits -- 2.29.1.341.ge80a0c044ae-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-11-04 21:18 UTC|newest] Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-11-04 21:18 [PATCH v14 0/8] arm64: expose FAR_EL1 tag bits in siginfo Peter Collingbourne 2020-11-04 21:18 ` Peter Collingbourne 2020-11-04 21:18 ` [PATCH v14 1/8] parisc: Drop parisc special case for __sighandler_t Peter Collingbourne 2020-11-04 21:18 ` Peter Collingbourne 2020-11-04 21:18 ` [PATCH v14 2/8] parisc: start using signal-defs.h Peter Collingbourne 2020-11-04 21:18 ` Peter Collingbourne 2020-11-04 21:18 ` [PATCH v14 3/8] arch: move SA_* definitions to generic headers Peter Collingbourne 2020-11-04 21:18 ` Peter Collingbourne 2020-11-04 21:18 ` [PATCH v14 4/8] signal: deduplicate code dealing with common _sigfault fields Peter Collingbourne 2020-11-04 21:18 ` Peter Collingbourne 2020-11-10 0:41 ` Eric W. Biederman 2020-11-10 0:41 ` Eric W. Biederman 2020-11-10 2:37 ` Peter Collingbourne 2020-11-10 2:37 ` Peter Collingbourne 2020-11-10 15:38 ` Eric W. Biederman 2020-11-10 15:38 ` Eric W. Biederman 2020-11-04 21:18 ` [PATCH v14 5/8] signal: clear non-uapi flag bits when passing/returning sa_flags Peter Collingbourne 2020-11-04 21:18 ` Peter Collingbourne 2020-11-10 0:35 ` Eric W. Biederman 2020-11-10 0:35 ` Eric W. Biederman 2020-11-10 2:19 ` Peter Collingbourne 2020-11-10 2:19 ` Peter Collingbourne 2020-11-04 21:18 ` Peter Collingbourne [this message] 2020-11-04 21:18 ` [PATCH v14 6/8] signal: define the SA_UNSUPPORTED bit in sa_flags Peter Collingbourne 2020-11-04 21:18 ` [PATCH v14 7/8] signal: define the field siginfo.si_faultflags Peter Collingbourne 2020-11-04 21:18 ` Peter Collingbourne 2020-11-10 1:54 ` Eric W. Biederman 2020-11-10 1:54 ` Eric W. Biederman 2020-11-11 11:10 ` Haren Myneni 2020-11-11 11:10 ` Haren Myneni 2020-11-11 20:46 ` Eric W. Biederman 2020-11-11 20:46 ` Eric W. Biederman 2020-11-10 1:57 ` Eric W. Biederman 2020-11-10 1:57 ` Eric W. Biederman 2020-11-11 17:27 ` Dave Martin 2020-11-11 17:27 ` Dave Martin 2020-11-11 20:15 ` Eric W. Biederman 2020-11-11 20:15 ` Eric W. Biederman 2020-11-11 20:28 ` Eric W. Biederman 2020-11-11 20:28 ` Eric W. Biederman 2020-11-12 17:21 ` Dave Martin 2020-11-12 17:21 ` Dave Martin 2020-11-12 17:23 ` Dave Martin 2020-11-12 17:23 ` Dave Martin 2020-11-12 20:01 ` Eric W. Biederman 2020-11-12 20:01 ` Eric W. Biederman 2020-11-04 21:18 ` [PATCH v14 8/8] arm64: expose FAR_EL1 tag bits in siginfo Peter Collingbourne 2020-11-04 21:18 ` Peter Collingbourne 2020-11-10 1:13 ` Eric W. Biederman 2020-11-10 1:13 ` Eric W. Biederman 2020-11-10 3:49 ` Peter Collingbourne 2020-11-10 3:49 ` Peter Collingbourne 2020-11-10 15:12 ` Eric W. Biederman 2020-11-10 15:12 ` Eric W. Biederman 2020-11-10 22:06 ` Peter Collingbourne 2020-11-10 22:06 ` Peter Collingbourne 2020-11-11 7:45 ` Eric W. Biederman 2020-11-11 7:45 ` Eric W. Biederman 2020-11-11 17:46 ` Dave Martin 2020-11-11 17:46 ` Dave Martin 2020-11-12 23:20 ` Peter Collingbourne 2020-11-12 23:20 ` Peter Collingbourne 2020-11-12 18:53 ` Catalin Marinas 2020-11-12 18:53 ` Catalin Marinas
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=87501c1e71b5a6ed96bb9b540718b0752d4d6fed.1604523707.git.pcc@google.com \ --to=pcc@google.com \ --cc=Dave.Martin@arm.com \ --cc=James.Bottomley@hansenpartnership.com \ --cc=andreyknvl@google.com \ --cc=catalin.marinas@arm.com \ --cc=david.spickett@linaro.org \ --cc=deller@gmx.de \ --cc=ebiederm@xmission.com \ --cc=eugenis@google.com \ --cc=kcc@google.com \ --cc=kevin.brodsky@arm.com \ --cc=linux-api@vger.kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=oleg@redhat.com \ --cc=rth@twiddle.net \ --cc=vincenzo.frascino@arm.com \ --cc=will@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.