[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <6ad30642-c3b5-4ab8-9ed6-1fa8c56a8995@efficios.com>
Date: Fri, 21 Feb 2025 15:05:58 -0500
From: Mathieu Desnoyers <mathieu.desnoyers@...icios.com>
To: Dave Hansen <dave.hansen@...el.com>, Dmitry Vyukov <dvyukov@...gle.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: "Paul E. McKenney" <paulmck@...nel.org>, x86@...nel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH 3/4] rseq: Make rseq work with protection keys
On 2025-02-21 14:48, Dave Hansen wrote:
> On 2/21/25 11:38, Mathieu Desnoyers wrote:
>> I agree that switching to permissive key in the fast path would be
>> simpler. AFAIU, the switch_to_permissive_pkey_reg() is only a pkey
>> read when the key is already permissive.
>
> Unfortunately, on x86, PKRU is almost never in its permissive state. We
> chose a policy (stored in the global init_pkru_value variable) that
> allows R/W access to pkey 0, but disables access to everything else.
> It's 0xfffffff5, IIRC.
>
> This ensures deny-by-default behavior and ensures that threads cloned
> off long ago don't have a dangerous PKRU value for newly-allocated and
> pkey-protected memory.
>
> If I had a time machine, it'd be interesting to go back and try to make
> PKRU's default value be all 0's and also represent the logically most
> restrictive value.
Can we assume (or require) that struct rseq and struct rseq_cs reside in
pkey-0 memory ?
In that case, we could add something to the pkey API that switches to a
permissive state only if pkey 0 cannot be accessed.
Therefore it would only trigger a pkey read in the common case, and
issue a pkey write only if pkey 0 is not accessible.
Thoughts ?
Thanks,
Mathieu
--
Mathieu Desnoyers
EfficiOS Inc.
https://www.efficios.com
Powered by blists - more mailing lists