summaryrefslogtreecommitdiffstats
path: root/sys/kern/vfs_subr.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2015-06-10 02:27:00 +0000
committerkib <kib@FreeBSD.org>2015-06-10 02:27:00 +0000
commit6f94b985b6eec30816303099b6b38772a0e161f2 (patch)
tree1d322fe029fdefb57aa8d5be188ecab5753d6a5f /sys/kern/vfs_subr.c
parent2187b2a06e2c4352326b9615e46b8efb66e5030d (diff)
downloadFreeBSD-src-6f94b985b6eec30816303099b6b38772a0e161f2.zip
FreeBSD-src-6f94b985b6eec30816303099b6b38772a0e161f2.tar.gz
MFC r283602:
Prevent dounmount() from acting on the freed (although type-stable) memory by changing the interface to require the mount point to be referenced. MFC r283629: Add missed {}.
Diffstat (limited to 'sys/kern/vfs_subr.c')
-rw-r--r--sys/kern/vfs_subr.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index 7b625be..a03d516 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -3493,8 +3493,9 @@ vfs_unmountall(void)
*/
while(!TAILQ_EMPTY(&mountlist)) {
mp = TAILQ_LAST(&mountlist, mntlist);
+ vfs_ref(mp);
error = dounmount(mp, MNT_FORCE, td);
- if (error) {
+ if (error != 0) {
TAILQ_REMOVE(&mountlist, mp, mnt_list);
/*
* XXX: Due to the way in which we mount the root
OpenPOWER on IntegriCloud