git: kernel - Fix bug in vm_fault_page()

Matthew Dillon dillon at crater.dragonflybsd.org
Wed Nov 8 19:39:58 PST 2017


commit 7a45978d5d974a9a30aa324b77b57b76bfa76996
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Wed Nov 8 19:35:14 2017 -0800

    kernel - Fix bug in vm_fault_page()
    
    * Fix a bug in vm_fault_page() and vm_fault_page_quick().  The code
      is not intended to update the user pmap, but if the vm_map_lookup()
      results in a COW, any existing page in the underlying pmap will no
      longer match the page that should be there.
    
      The user process will still work correctly in that it will fault the
      COW'd page if/when it tries to issue a write to that address, but
      userland will not have visibility to any kernel use of vm_fault_page()
      that modifies the page and causes a COW if the page has already been
      faulted in.
    
    * Fixed by detecting the COW and at least removing the pte from the pmap
      to force userland to re-fault it.
    
    * This fixes gdb operation on programs.  The problem did not rear its
      head before because the kernel did not pre-populate as many pages in the
      initial exec as it does now.
    
    * Enhance vm_map_lookup()'s &wired argument to return wflags instead,
      which includes FS_WIRED and also now has FS_DIDCOW.
    
    Reported-by: profmakx

Summary of changes:
 sys/kern/sys_process.c            | 10 ++---
 sys/platform/pc64/vmm/vmm_utils.c |  3 +-
 sys/platform/pc64/x86_64/pmap.c   | 14 +++----
 sys/vfs/procfs/procfs_mem.c       |  2 +-
 sys/vm/vm_fault.c                 | 80 +++++++++++++++++++++------------------
 sys/vm/vm_map.c                   |  9 +++--
 sys/vm/vm_map.h                   | 11 +++++-
 7 files changed, 74 insertions(+), 55 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/7a45978d5d974a9a30aa324b77b57b76bfa76996


-- 
DragonFly BSD source repository



More information about the Commits mailing list