Re: [PATCH v4 0/4] rseq: Make rseq work with protection keys

From: Dmitry Vyukov
Date: Mon Feb 24 2025 - 08:32:40 EST


On Mon, 24 Feb 2025 at 14:21, Dmitry Vyukov <dvyukov@xxxxxxxxxx> wrote:
>
> 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.
>
> 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 | 33 ++++++++
> 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 | 99 ++++++++++++++++++++++++
> tools/testing/selftests/rseq/rseq.h | 1 +
> 10 files changed, 188 insertions(+), 8 deletions(-)
> create mode 100644 tools/testing/selftests/rseq/pkey_test.c
>
>
> base-commit: d082ecbc71e9e0bf49883ee4afd435a77a5101b6
> --
> 2.48.1.601.g30ceb7b040-goog

+LKML/x86 lists for archiving purposes