diff options
author | mav <mav@FreeBSD.org> | 2011-12-02 17:09:48 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2011-12-02 17:09:48 +0000 |
commit | 96d9af62bbe817ab1182b559a1fede75543e0177 (patch) | |
tree | e97a9ddbe0ce07e3abc96820f06c2fd7100d125d | |
parent | 0eadafa1b91a3e0007bd32bba45d7bb8403f7579 (diff) | |
download | FreeBSD-src-96d9af62bbe817ab1182b559a1fede75543e0177.zip FreeBSD-src-96d9af62bbe817ab1182b559a1fede75543e0177.tar.gz |
Close race between geom destruction on g_vfs_close() when softc destroyed
and g_vfs_orphan() call that tries to access softc, intruced at r227015.
PR: kern/162997
-rw-r--r-- | sys/geom/geom_vfs.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/geom/geom_vfs.c b/sys/geom/geom_vfs.c index a3e5138..9be0000 100644 --- a/sys/geom/geom_vfs.c +++ b/sys/geom/geom_vfs.c @@ -169,8 +169,10 @@ g_vfs_orphan(struct g_consumer *cp) g_topology_assert(); gp = cp->geom; - sc = gp->softc; g_trace(G_T_TOPOLOGY, "g_vfs_orphan(%p(%s))", cp, gp->name); + sc = gp->softc; + if (sc == NULL) + return; mtx_lock(&sc->sc_mtx); sc->sc_orphaned = 1; destroy = (sc->sc_active == 0); |