x86: Add EPTs to the boot_pmls
authorBarret Rhoden <brho@cs.berkeley.edu>
Sun, 27 Nov 2016 18:40:06 +0000 (13:40 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 29 Nov 2016 16:27:40 +0000 (11:27 -0500)
commit22278d2c2a5fbf548b5a48f334d3da02e0786812
tree8ca516fe0f179edacd0a01cf4c58350dc1a8e63c
parentd319680ec36ef6714dc3d797a94084154ac7c236
x86: Add EPTs to the boot_pmls

Previously, the boot page tables (set up in entry64.S) were only KPTs,
but with no space for EPTs.  If we performed any pmap functions that
assumed there were EPTs, then we'd be clobbering nearby, unused memory.

This was potentially happening for map_vmap_segment(), which innocently
called pte_write(), which assumes there is an EPT table adjacent to the
KPT.  This would only have been a problem if we were working on a boot
pml table, to include the boot_pml4.

Although the kernel will never use the EPT mappings, and those mappings
are not copied from boot_pml4 to the processes' page tables, it's safer
to always have the memory for the EPT available so that we don't have to
special case that much code.

Though for a dose of paranoia, I won't fill in the intermediate EPT
entries.  It's safe to write the memory of an EPT (e.g. pte_write()),
but since the EPT PMLs aren't linked, the walks won't go anywhere.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/arch/x86/entry64.S
kern/arch/x86/pmap64.c