Page MenuHomeFreeBSD

Do not preemptively create wired superpage mappings.
ClosedPublic

Authored by markj on Mar 21 2019, 4:18 PM.
Tags
None
Referenced Files
F107128362: D19670.diff
Fri, Jan 10, 1:41 PM
Unknown Object (File)
Thu, Dec 12, 12:23 PM
Unknown Object (File)
Dec 6 2024, 5:42 AM
Unknown Object (File)
Dec 4 2024, 4:27 PM
Unknown Object (File)
Nov 30 2024, 7:42 AM
Unknown Object (File)
Nov 30 2024, 7:40 AM
Unknown Object (File)
Nov 30 2024, 7:40 AM
Unknown Object (File)
Nov 30 2024, 7:33 AM
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.