git: kernel - Fix vmspace termination race (2)

Matthew Dillon dillon at crater.dragonflybsd.org
Thu Feb 9 18:53:14 PST 2017


commit a9d06cca8c6894668c0d26cfa6846fb58975a647
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Thu Feb 9 16:51:44 2017 -0800

    kernel - Fix vmspace termination race (2)
    
    * Fix a race and fix dangling cached mount points.  At the point where
      dounmount() checks to see if there are any dangling cache refs left
      it has already dropped its own ref on the mp.  The test, however,
      was (refs > 1).  The test needs to be (refs > 0).
    
      This race was probably causing the corruption, and in fact its the
      smoking gun because the mp->mnt_refs field is at the same offset as
      the pmap->copyin field, and the pmap->copyin field was getting
      corrupted by being decremented by 1.
    
    * Fix a race where the unmount code was issuing tue dounmount() call
      without any ref or hold on the mp.  This race was unlikely (requires
      two unmounts of the same partition at the same time).

Summary of changes:
 sys/kern/vfs_mount.c    | 19 ++++++++++++++----
 sys/kern/vfs_syscalls.c | 52 ++++++++++++++++++++++++++++++++++++++++---------
 2 files changed, 58 insertions(+), 13 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/a9d06cca8c6894668c0d26cfa6846fb58975a647


-- 
DragonFly BSD source repository



More information about the Commits mailing list