From: Florian Weimer <fweimer@redhat.com>
To: Thomas Gleixner <tglx@linutronix.de>
Cc: Kevin Brodsky <kevin.brodsky@arm.com>,
Dmitry Vyukov <dvyukov@google.com>,
mathieu.desnoyers@efficios.com, peterz@infradead.org,
boqun.feng@gmail.com, mingo@redhat.com, bp@alien8.de,
dave.hansen@linux.intel.com, hpa@zytor.com,
aruna.ramakrishna@oracle.com, elver@google.com,
"Paul E. McKenney" <paulmck@kernel.org>,
x86@kernel.org, linux-kernel@vger.kernel.org,
Jens Axboe <axboe@kernel.dk>
Subject: Re: [PATCH v7 3/4] rseq: Make rseq work with protection keys
Date: Wed, 26 Nov 2025 20:06:26 +0100 [thread overview]
Message-ID: <lhuy0ns3971.fsf@oldenburg.str.redhat.com> (raw)
In-Reply-To: <87a508he4h.ffs@tglx> (Thomas Gleixner's message of "Wed, 26 Nov 2025 18:56:14 +0100")
* Thomas Gleixner:
>> I'm less concerned about the impact on restart of restartable sequences
>> because by design, it's a non-modular feature: syscalls and function
>> calls are already banned. If the code wants to restart, it has to make
>> sure that the access rights at the restart point are correct. But
>> that's like any other register contents, I think.
>
> It's not only restart. RSEQ is also accessed by the kernel for storing
> CPUID, NODEID, CID. Some of that is used in glibc today, no?
But glibc code cannot run from within an rseq critical section. And I
think it's not reasonable to expect that if you revoke access to all
allocated protection keys, it's well-defined t o call library code.
>> Would it help to allocate a dedicated key for rseq and specify that
>> userspace must always include this access in the accessible set?
>
> That would definitely be helpful to avoid switching PKRU in rseq
> handling code on exit to user space.
>
> Though with the reworked RSEQ code the extra overhead might not be
> horrible. See below.
We might have to dedicate an extra page, too. So I prefer to avoid it
possible.
I think I missed the below part?
> But like with signals just blindly enabling key0 and hope that it works
> is not really a solution. Nothing prevents me from disabling RSEQ for
> glibc. Then install my own RSEQ page and mprotect it. When that key
> becomes disabled in PKRU and the code section is interrupted then exit
> to user space will fault and die in exactly the same way as
> today. That's progress...
But does that matter? If I mprotect the stack and a signal arrives,
that results in a crash, too. Some things just don't work.
> So we really need to sit down and actually define a proper programming
> model first instead of trying to duct tape the current ill defined mess
> forever.
>
> What do we have to take into account:
>
> 1) signals
>
> Broken as we know already.
>
> IMO, the proper solution is to provide a mechanism to register a
> set of permissions which are used for signal delivery. The
> resulting hardware value should expand the permission, but keep
> the current active ones enabled.
>
> That can be kinda kept backwards compatible as the signal perms
> would default to PKEY0.
I had validated at one point that this works (although the patch that
enables internal pkeys usage in glibc did not exist back then).
pkeys: Support setting access rights for signal handlers
<https://lore.kernel.org/linux-mm/5fee976a-42d4-d469-7058-b78ad8897219@redhat.com/>
> 2) rseq
>
> The option of having a separate key which needs to be always
> enabled is definitely simple, but it wastes a key just for
> that. There are only 16 of them :(
>
> If we solve the signal case with an explicit permission set, we
> can just reuse those signal permissions. They are maybe wider than
> what's required to access RSEQ, but the signal permissions have to
> include the TLS/RSEQ area to actually work.
Would it address the use case for single-colored memory access? Or
would that still crash if the process gets descheduled while the access
rights register is set to the restricted value?
Thanks,
Florian
next prev parent reply other threads:[~2025-11-26 19:06 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-21 8:47 [PATCH v7 0/4] rseq: Make rseq work with protection keys Dmitry Vyukov
2025-05-21 8:47 ` [PATCH v7 1/4] pkeys: add API to switch to permissive/zero pkey register Dmitry Vyukov
2025-05-21 8:47 ` [PATCH v7 2/4] x86/signal: Use write_permissive_pkey_val() helper Dmitry Vyukov
2025-05-21 8:47 ` [PATCH v7 3/4] rseq: Make rseq work with protection keys Dmitry Vyukov
2025-05-21 8:59 ` Dmitry Vyukov
2025-06-24 9:17 ` Dmitry Vyukov
2025-07-18 9:01 ` Dmitry Vyukov
2025-07-21 13:25 ` Mathieu Desnoyers
2025-07-21 17:41 ` Dave Hansen
2025-08-21 15:12 ` Dmitry Vyukov
2025-09-19 13:07 ` Dmitry Vyukov
2025-09-22 13:06 ` Mathieu Desnoyers
2025-10-20 13:46 ` Kevin Brodsky
2025-11-26 0:45 ` Thomas Gleixner
2025-11-26 9:32 ` Florian Weimer
2025-11-26 17:56 ` Thomas Gleixner
2025-11-26 19:06 ` Florian Weimer [this message]
2025-11-26 20:52 ` Thomas Gleixner
2025-11-26 22:06 ` Florian Weimer
2025-11-27 14:38 ` Thomas Gleixner
2025-12-02 19:19 ` Kevin Brodsky
2025-05-21 8:47 ` [PATCH v7 4/4] selftests/rseq: Add test for rseq+pkeys Dmitry Vyukov
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=lhuy0ns3971.fsf@oldenburg.str.redhat.com \
--to=fweimer@redhat.com \
--cc=aruna.ramakrishna@oracle.com \
--cc=axboe@kernel.dk \
--cc=boqun.feng@gmail.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=dvyukov@google.com \
--cc=elver@google.com \
--cc=hpa@zytor.com \
--cc=kevin.brodsky@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mingo@redhat.com \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=x86@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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox