Page MenuHomeFreeBSD

Do not preemptively create wired superpage mappings.
ClosedPublic

Authored by markj on Mar 21 2019, 4:18 PM.
Tags
None
Referenced Files
Unknown Object (File)
Sun, Apr 21, 7:15 PM
Unknown Object (File)
Sun, Apr 21, 6:02 PM
Unknown Object (File)
Sun, Apr 21, 8:35 AM
Unknown Object (File)
Fri, Apr 5, 1:24 PM
Unknown Object (File)
Thu, Mar 28, 1:54 PM
Unknown Object (File)
Mar 6 2024, 6:11 AM
Unknown Object (File)
Jan 5 2024, 1:22 PM
Unknown Object (File)
Jan 3 2024, 9:52 PM
Subscribers

Details

Summary

There are some corner cases that can create an unmapped, wired region in
a user address space:

  • msync(MS_INVALIDATE)
  • mprotect(PROT_NONE) -> mprotect(PROT_READ)
  • truncation of a vnode/shm object to a smaller size and back to a larger size

A fault on such a region can trigger preemptive superpage creation
with pmap_enter(PMAP_ENTER_WIRED, psind=1). However, the various
pmaps do not handle this properly and will create a wired superpage
without a leaf page in the pmap's radix tree, so demotion may fail
and cause the address range to be unmapped.

I am not yet sure that we should fix all of the pmaps to handle this,
but for now just make it impossible.

Diff Detail

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

This revision is now accepted and ready to land.Mar 21 2019, 5:16 PM

Update vm_fault_populate() as well.

This revision now requires review to proceed.Mar 21 2019, 6:49 PM
This revision is now accepted and ready to land.Mar 21 2019, 7:29 PM
This revision was automatically updated to reflect the committed changes.