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)
Mar 28 2024, 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

Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 23235
Build 22276: arc lint + arc unit

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.