Thread (4 messages) flat view 4 messages, 3 authors, 2022-01-24

Re: [RFC PATCH] rseq: Fix broken uapi field layout on 32-bit little endian

From: Greg KH <gregkh@linuxfoundation.org>
Date: 2022-01-24 06:19:32
Also in: lkml, stable

On Sun, Jan 23, 2022 at 02:31:54PM -0500, Mathieu Desnoyers wrote:
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.

While working on fixing the ppc32 support in librseq [1], I made sure
all 32-bit little endian architectures stopped depending on little
endian byte ordering by using the ptr32 field. It led me to discover
this wrong ptr32 field ordering on little endian.

Because it is already exposed as a UAPI, all we can do for the existing
fields is document the wrong behavior and encourage users to use
alternative mechanisms.

Introduce a new rseq_cs.arch field with correct field ordering. Use this
opportunity to improve the layout so accesses to architecture fields on
both 32-bit and 64-bit architectures are done through the same field
hierarchy, which is much nicer than the previous scheme.

The intended use is now:

* rseq_thread_area->rseq_cs.ptr64: Access the 64-bit value of the rseq_cs
				   pointer. Available on all
                                   architectures (unchanged).

* rseq_thread_area->rseq_cs.arch.ptr: Access the architecture specific
				      layout of the rseq_cs pointer. This
				      is a 32-bit field on 32-bit
				      architectures, and a 64-bit field on
                                      64-bit architectures.

Link: https://git.kernel.org/pub/scm/libs/librseq/librseq.git/ [1]
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 | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
<formletter>

This is not the correct way to submit patches for inclusion in the
stable kernel tree.  Please read:
    https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
for how to do this properly.

</formletter>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help