From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: Dmitry Vyukov <dvyukov@google.com>
Cc: peterz@infradead.org, boqun.feng@gmail.com, tglx@linutronix.de,
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
Subject: Re: [PATCH 3/4] rseq: Make rseq work with protection keys
Date: Tue, 18 Feb 2025 09:57:46 -0500 [thread overview]
Message-ID: <cf7af2a8-c004-481b-ad2e-6aa991aacb67@efficios.com> (raw)
In-Reply-To: <CACT4Y+Ym7=9mLS8b=Rq6cyHMgyboMqh15nqkRfgru-qFVTx_0A@mail.gmail.com>
On 2025-02-18 02:55, Dmitry Vyukov wrote:
> On Mon, 17 Feb 2025 at 21:21, Mathieu Desnoyers
[...]
>>
>> we still let this function read the rseq_cs.
>>> + * It's unclear what benefits the resticted code gets by doing this
>>
>> restricted
>>
>>> + * (it probably already hijacked control flow at this point), and
>>> + * presumably any sane sandbox should prohibit restricted code
>>> + * from accessing struct rseq, and this is still better than
>>> + * terminating the app unconditionally (it always has a choice
>>> + * of not using rseq and pkeys together).
>>
>> Note that because userspace can complete an rseq critical section
>> without clearing the rseq_cs pointer, this could happen simply because
>> the kernel is preempting the task after it has:
>>
>> 1) completed an rseq critical section, without clearing rseq_cs,
>> 2) changed pkey.
>>
>> So allowing this is important, and I would remove the comment about
>> hijacked control flow and such. This can happen with normal use of the
>> ABI.
>
> Thanks for the review!
>
> I've addressed all comments in the series in v2.
>
> I've reworded this paragraph to simplify sentences, but I still kept
> the note aboud malicious rseq_cs.
>
> If we would not be circumventing normal protection, then, yes, these
> cases would be the same. But since we are circumventing protection
> that otherwise exists, I think it's important to think about
> potentially malicious cases. In this context inaccessible rseq_cs
> values that resulted from normal execution are very different from
> malicious onces. Normal ones will point to a fixed set of real
> well-formed rseq_cs objects, while malicious ones may point to
> god-knows-where in an attempt of an attacker to do things we can't
> even imagine right now (e.g. rseq_cs overlapping with protected crypto
> keys).
>
> It's as if a particular instance of copy_to_user would allow
> user-space to write arbitrary kernel memory, and memory of other
> processes circumventing all normal protections. In that context we
> would need to be very careful regarding what we actually allow.
I'm considering that we should clear the rseq_cs pointer whenever
userspace issues pkey_mprotect.
This would ensure that no legitimate scenario can trigger a load
from a rseq_cs area which has the wrong pkey, and therefore we
could accept read/write from/to a struct rseq which has the wrong
pkey, but kill the process if trying to read/write from a
struct rseq_cs with the wrong key. This would prevent userspace
from making the kernel read/write from/to memory with the wrong
pkey through a pointer it controls (rseq_cs pointer).
Thoughts ?
Thanks,
Mathieu
--
Mathieu Desnoyers
EfficiOS Inc.
https://www.efficios.com
next prev parent reply other threads:[~2025-02-18 14:57 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <cover.1739790300.git.dvyukov@google.com>
2025-02-17 11:07 ` [PATCH 1/4] pkeys: add API to switch to permissive pkey register Dmitry Vyukov
2025-02-17 20:03 ` Mathieu Desnoyers
2025-02-17 20:08 ` Mathieu Desnoyers
2025-02-17 20:09 ` Mathieu Desnoyers
2025-02-21 17:01 ` Dave Hansen
2025-02-24 13:25 ` Dmitry Vyukov
2025-02-25 16:15 ` Dave Hansen
2025-02-25 21:56 ` Dmitry Vyukov
2025-02-26 10:00 ` Dmitry Vyukov
2025-02-26 17:21 ` Dave Hansen
2025-02-27 13:58 ` Dmitry Vyukov
2025-02-21 17:37 ` Dave Hansen
2025-02-17 11:07 ` [PATCH 2/4] x86/signal: Use switch_to_permissive_pkey_reg() helper Dmitry Vyukov
2025-02-21 16:26 ` Dave Hansen
2025-02-24 13:13 ` Dmitry Vyukov
2025-02-17 11:07 ` [PATCH 3/4] rseq: Make rseq work with protection keys Dmitry Vyukov
2025-02-17 20:21 ` Mathieu Desnoyers
2025-02-18 7:55 ` Dmitry Vyukov
2025-02-18 14:57 ` Mathieu Desnoyers [this message]
2025-02-18 15:10 ` Dmitry Vyukov
2025-02-18 15:27 ` Mathieu Desnoyers
2025-02-18 15:37 ` Dmitry Vyukov
2025-02-21 11:22 ` Dmitry Vyukov
2025-02-21 19:41 ` Mathieu Desnoyers
2025-02-21 17:17 ` Dave Hansen
2025-02-21 19:38 ` Mathieu Desnoyers
2025-02-21 19:48 ` Dave Hansen
2025-02-21 20:05 ` Mathieu Desnoyers
2025-02-21 20:50 ` Dave Hansen
2025-02-21 21:11 ` Mathieu Desnoyers
2025-02-21 21:36 ` Mathieu Desnoyers
2025-02-21 21:45 ` Dave Hansen
2025-02-24 13:35 ` Dmitry Vyukov
2025-02-21 21:40 ` Dave Hansen
2025-02-17 11:07 ` [PATCH 4/4] selftests/rseq: Add test for rseq+pkeys Dmitry Vyukov
2025-02-17 20:23 ` Mathieu Desnoyers
2025-02-21 17:24 ` Dave Hansen
2025-02-24 13:22 ` 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=cf7af2a8-c004-481b-ad2e-6aa991aacb67@efficios.com \
--to=mathieu.desnoyers@efficios.com \
--cc=aruna.ramakrishna@oracle.com \
--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=linux-kernel@vger.kernel.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.