Thread (25 messages) 25 messages, 4 authors, 2022-01-28

Re: [RFC PATCH 02/15] rseq: Remove broken uapi field layout on 32-bit little endian

flat view

From: Christian Brauner <brauner@kernel.org>
Date: 2022-01-25 12:26:20
Also in: linux-kselftest, lkml

On Mon, Jan 24, 2022 at 12:12:40PM -0500, Mathieu Desnoyers wrote:
quoted hunk ↗ jump to hunk
The rseq rseq_cs.ptr.{ptr32,padding} uapi endianness handling is
entirely wrong on 32-bit little endian: a preprocessor logic mistake
wrongly uses the big endian field layout on 32-bit little endian
architectures.

Fortunately, those ptr32 accessors were never used within the kernel,
and only meant as a convenience for user-space.

Remove those and only leave the "ptr64" union field, as this is the only
thing really needed to express the ABI. Document how 32-bit
architectures are meant to interact with this "ptr64" union field.

Fixes: ec9c82e03a74 ("rseq: uapi: Declare rseq_cs field as union, update includes")
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Florian Weimer <redacted>
Cc: Thomas Gleixner <redacted>
Cc: linux-api@vger.kernel.org
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Boqun Feng <redacted>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Dave Watson <redacted>
Cc: Paul Turner <redacted>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Russell King <redacted>
Cc: "H . Peter Anvin" <hpa@zytor.com>
Cc: Andi Kleen <redacted>
Cc: Christian Brauner <redacted>
Cc: Ben Maurer <redacted>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Josh Triplett <josh@joshtriplett.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <redacted>
Cc: Michael Kerrisk <redacted>
Cc: Joel Fernandes <redacted>
Cc: Paul E. McKenney <paulmck@kernel.org>
---
 include/uapi/linux/rseq.h | 17 ++++-------------
 1 file changed, 4 insertions(+), 13 deletions(-)
diff --git a/include/uapi/linux/rseq.h b/include/uapi/linux/rseq.h
index 9a402fdb60e9..31290f2424a7 100644
--- a/include/uapi/linux/rseq.h
+++ b/include/uapi/linux/rseq.h
@@ -105,22 +105,13 @@ struct rseq {
 	 * Read and set by the kernel. Set by user-space with single-copy
 	 * atomicity semantics. This field should only be updated by the
 	 * thread which registered this data structure. Aligned on 64-bit.
+	 *
+	 * 32-bit architectures should update the low order bits of the
+	 * rseq_cs.ptr64 field, leaving the high order bits initialized
+	 * to 0.
 	 */
 	union {
A bit unfortunate we seem to have to keep the union around even though
it's just one field now.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help