public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* managing memory attributes in PEI
@ 2023-05-22 11:31 Ard Biesheuvel
  2023-05-22 12:06 ` Gerd Hoffmann
  2023-05-23  5:31 ` Laszlo Ersek
  0 siblings, 2 replies; 20+ messages in thread
From: Ard Biesheuvel @ 2023-05-22 11:31 UTC (permalink / raw)
  To: edk2-devel-groups-io, Ray Ni, Jiewen Yao, Gerd Hoffmann,
	Laszlo Ersek, Taylor Beebe, Oliver Smith-Denny

Hello all,

(OVMF specific questions below - please keep reading)

As a follow-up to the discussion we had last week regarding DXE core,
I'd like to raise the issue of managing memory permissions in PEI,
including the mapping attributes of the code and data regions of DXE
core itself.

This is about good hygiene in general, but on arm64 in particular,
limiting execution permissions to memory regions that are mapped
read-only allows the MMU to be enabled in WXN mode, where all writable
regions are non-executable by default.

I have implemented a proof-of-concept of this for ArmVirtQemu and
Raspberry Pi 4 (the former using PEI and the latter PEI-less), and
this seems quite feasible in practice, but there are a few issues that
I have identified:

- PEI shadowing is currently disabled entirely - this is actually an
advantage for the [virtual] platform in question, given that shadowing
is more work for no benefit, but it is something that needs to be
addressed in the general case;
- no generic method exists to manage page table permissions.

So what I would like to propose (and what I intend to prototype) is a
PPI that abstracts this capability, and which can be used by the PEI
image loader as well as the DxeIpl to manage read-only and non-exec
permissions. Most PEIMs only have a code region anyway, so hopefully
there is some room for optimization where not all PEIMs need 4k
alignment.

That leaves one big issue, and this is related to OVMF's use of IA32
PEI with X64 DXE. This complicates the DxeIpl substantially already,
but would make this effort rather tricky as well.

So my questions are:
- do we need to retain mixed IA32 / X64 support, and if so, why? (I
think it is related to SMM emulation but I need someone to confirm
this)
- if we need to retain it, could we run PEI in long mode but with
32-bit compatibility enabled, so that we don't need two or three
incompatible sets of page tables?

In the latter case, the PPI in question would carry the same logic for
IA32 and X64 builds, and create 4-level page tables with the code
still being 32-bit.

Once we clear this up, I'm happy to look into extending my prototype
to x86 as well.

Thanks,
Ard.

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2023-05-24  2:55 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-22 11:31 managing memory attributes in PEI Ard Biesheuvel
2023-05-22 12:06 ` Gerd Hoffmann
2023-05-22 23:20   ` Ni, Ray
2023-05-23  4:49     ` Gerd Hoffmann
2023-05-23  5:46       ` Laszlo Ersek
2023-05-23  5:50         ` [edk2-devel] " Ni, Ray
2023-05-23  5:44   ` Laszlo Ersek
2023-05-23  5:31 ` Laszlo Ersek
2023-05-23  5:39   ` Ni, Ray
2023-05-23  7:34     ` Laszlo Ersek
2023-05-23  7:52       ` Ni, Ray
2023-05-23  7:54       ` Ard Biesheuvel
2023-05-23  8:05       ` Gerd Hoffmann
2023-05-23  8:15         ` Ard Biesheuvel
2023-05-23 14:49       ` [edk2-devel] " Michael D Kinney
2023-05-23 14:58         ` Ard Biesheuvel
2023-05-23 15:14           ` Michael D Kinney
2023-05-23 15:51             ` Ard Biesheuvel
2023-05-23 16:47               ` Michael D Kinney
2023-05-24  2:54                 ` Ni, Ray

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox