[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <cover.1740491413.git.dvyukov@google.com>
Date: Tue, 25 Feb 2025 14:53:42 +0100
From: Dmitry Vyukov <dvyukov@...gle.com>
To: mathieu.desnoyers@...icios.com, peterz@...radead.org, boqun.feng@...il.com,
tglx@...utronix.de, mingo@...hat.com, bp@...en8.de,
dave.hansen@...ux.intel.com, hpa@...or.com, aruna.ramakrishna@...cle.com,
elver@...gle.com
Cc: Dmitry Vyukov <dvyukov@...gle.com>, "Paul E. McKenney" <paulmck@...nel.org>, x86@...nel.org,
linux-kernel@...r.kernel.org
Subject: [PATCH v5 0/4] rseq: Make rseq work with protection keys
If an application registers rseq, and ever switches to another pkey
protection (such that the rseq becomes inaccessible), then any
context switch will cause failure in __rseq_handle_notify_resume()
attempting to read/write struct rseq and/or rseq_cs. Since context
switches are asynchronous and are outside of the application control
(not part of the restricted code scope), temporarily enable access
to 0 (default) PKEY to read/write rseq/rseq_cs.
0 is the only PKEY supported for rseq for now.
Theoretically other PKEYs can be supported, but it's unclear
how/if that can work. So for now we don't support that to simplify
code.
Cc: Mathieu Desnoyers <mathieu.desnoyers@...icios.com>
Cc: Peter Zijlstra <peterz@...radead.org>
Cc: "Paul E. McKenney" <paulmck@...nel.org>
Cc: Boqun Feng <boqun.feng@...il.com>
Cc: Thomas Gleixner <tglx@...utronix.de>
Cc: Ingo Molnar <mingo@...hat.com>
Cc: Borislav Petkov <bp@...en8.de>
Cc: Dave Hansen <dave.hansen@...ux.intel.com>
Cc: "H. Peter Anvin" <hpa@...or.com>
Cc: Aruna Ramakrishna <aruna.ramakrishna@...cle.com>
Cc: x86@...nel.org
Cc: linux-kernel@...r.kernel.org
Dmitry Vyukov (4):
pkeys: add API to switch to permissive/zero pkey register
x86/signal: Use write_permissive_pkey_val() helper
rseq: Make rseq work with protection keys
selftests/rseq: Add test for rseq+pkeys
arch/x86/Kconfig | 1 +
arch/x86/include/asm/pkeys.h | 30 ++++++++
arch/x86/include/asm/pkru.h | 10 ++-
arch/x86/kernel/signal.c | 6 +-
include/linux/pkeys.h | 31 ++++++++
kernel/rseq.c | 11 +++
mm/Kconfig | 2 +
tools/testing/selftests/rseq/Makefile | 2 +-
tools/testing/selftests/rseq/pkey_test.c | 98 ++++++++++++++++++++++++
tools/testing/selftests/rseq/rseq.h | 1 +
10 files changed, 184 insertions(+), 8 deletions(-)
create mode 100644 tools/testing/selftests/rseq/pkey_test.c
base-commit: d082ecbc71e9e0bf49883ee4afd435a77a5101b6
--
2.48.1.658.g4767266eb4-goog
Powered by blists - more mailing lists