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)
Tue, Mar 4, 4:37 PM
Unknown Object (File)
Tue, Mar 4, 9:17 AM
Unknown Object (File)
Tue, Feb 25, 3:12 AM
Unknown Object (File)
Sat, Feb 22, 3:14 PM
Unknown Object (File)
Jan 26 2025, 4:35 PM
Unknown Object (File)
Jan 25 2025, 2:02 PM
Unknown Object (File)
Jan 10 2025, 4:28 PM
Unknown Object (File)
Jan 10 2025, 1:41 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.