From cde8e8b7a905ce53fe72a1a71b86e9ef352bbc3a Mon Sep 17 00:00:00 2001 From: Andrei Vagin Date: Fri, 30 Apr 2021 23:03:38 -0700 Subject: kvm: prefault a root table page before switching into a user address space The root table physical page has to be mapped to not fault in iret or sysret after switching into a user address space. sysret and iret are in the upper half that is global and so page tables of lower levels are already mapped. Fixes #5742 PiperOrigin-RevId: 371458644 --- pkg/ring0/pagetables/pagetables.go | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'pkg/ring0/pagetables') diff --git a/pkg/ring0/pagetables/pagetables.go b/pkg/ring0/pagetables/pagetables.go index 3f17fba49..9dac53c80 100644 --- a/pkg/ring0/pagetables/pagetables.go +++ b/pkg/ring0/pagetables/pagetables.go @@ -322,3 +322,12 @@ func (p *PageTables) Lookup(addr hostarch.Addr, findFirst bool) (virtual hostarc func (p *PageTables) MarkReadOnlyShared() { p.readOnlyShared = true } + +// PrefaultRootTable touches the root table page to be sure that its physical +// pages are mapped. +// +//go:nosplit +//go:noinline +func (p *PageTables) PrefaultRootTable() PTE { + return p.root[0] +} -- cgit v1.2.3