|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] x86/boot: Restrict directmap permissions for .text/.rodata
On 06.12.2021 14:08, Andrew Cooper wrote:
> While we've been diligent to ensure that the main text/data/rodata mappings
> have suitable restrictions, their aliases via the directmap were left fully
> RW. Worse, we even had pieces of code making use of this as a feature.
>
> Restrict the permissions, as we have no legitimate need for writeability of
> these areas via the directmap alias.
Where do we end up reading .text and/or .rodata through the directmap? Can't
we zap the mappings altogether?
As to superpage shattering - I understand this is not deemed to be an issue
in the common case since, with Xen moved as high up below 4G as possible,
it wouldn't normally live inside a 1G mapping anyway? This may want calling
out here. Plus, in non-EFI, non-XEN_ALIGN_2M builds isn't this going to
shatter a 2M page at the tail of .rodata?
> Note that the pagetables and cpu0_stack do get written through their directmap
> alias, so we can't just read-only the whole image.
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> ---
> CC: Jan Beulich <JBeulich@xxxxxxxx>
> CC: Roger Pau Monné <roger.pau@xxxxxxxxxx>
> CC: Wei Liu <wl@xxxxxxx>
>
> Ever so slightly RFC, as it has only had light testing.
>
> Notes:
> * The stubs are still have RX via one alias, RW via another, and these need
> to stay. Hardening options include splitting the stubs so the SYSCALL ones
> can be read-only after setup, and/or expanding the stub size to 4k per CPU
> so we really can keep the writeable alias as not present when the stub
> isn't in active use.
> * Future CPUs with Protection Key Supervisor (Sapphire Rapids and later)
> would be able to inhibit writeability outside of a permitted region, and
> because the protection key is per logical thread, we woulnd't need to
> expand the stubs to 4k per CPU.
I'm afraid I don't follow: The keys still apply to entire pages, don't they?
This would still allow write access by all 16 CPUs sharing a page for their
stubs.
> * At the time of writing, PV Shim still makes use of .rodata's read/write
> alias in the directmap to patch the hypercall table, but that runs earlier
> on boot. Also, there are patches out to address this.
I did consider committing that change, but it wasn't clear to me whether
there were dependencies on earlier parts of the series that it's part of.
> * For backporting, this patch depends on c/s e7f147bf4ac7 ("x86/crash: Drop
> manual hooking of exception_table[]"), and nothing would break at compile
> time if the dependency was missing.
Hmm, not nice. I'm likely to forget if we would indeed decide to backport
the one here.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |