Path: blob/main/website/static/security/patches/EN-10:01/zfsmac.patch
18096 views
Index: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c1===================================================================2--- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c (revision 200583)3+++ sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c (working copy)4@@ -143,16 +143,19 @@ zfs_znode_cache_constructor(void *buf, void *arg,56POINTER_INVALIDATE(&zp->z_zfsvfs);7ASSERT(!POINTER_IS_VALID(zp->z_zfsvfs));8- ASSERT(vfsp != NULL);910- error = getnewvnode("zfs", vfsp, &zfs_vnodeops, &vp);11- if (error != 0 && (kmflags & KM_NOSLEEP))12- return (-1);13- ASSERT(error == 0);14- vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);15- zp->z_vnode = vp;16- vp->v_data = (caddr_t)zp;17- VN_LOCK_AREC(vp);18+ if (vfsp != NULL) {19+ error = getnewvnode("zfs", vfsp, &zfs_vnodeops, &vp);20+ if (error != 0 && (kmflags & KM_NOSLEEP))21+ return (-1);22+ ASSERT(error == 0);23+ vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);24+ zp->z_vnode = vp;25+ vp->v_data = (caddr_t)zp;26+ VN_LOCK_AREC(vp);27+ } else {28+ zp->z_vnode = NULL;29+ }3031list_link_init(&zp->z_link_node);3233@@ -1435,7 +1438,7 @@ zfs_create_fs(objset_t *os, cred_t *cr, nvlist_t *34nvpair_t *elem;35int error;36znode_t *rootzp = NULL;37- vnode_t *vp;38+ vnode_t vnode;39vattr_t vattr;40znode_t *zp;4142@@ -1504,13 +1507,13 @@ zfs_create_fs(objset_t *os, cred_t *cr, nvlist_t *43vattr.va_gid = crgetgid(cr);4445rootzp = kmem_cache_alloc(znode_cache, KM_SLEEP);46- zfs_znode_cache_constructor(rootzp, &zfsvfs, 0);47+ zfs_znode_cache_constructor(rootzp, NULL, 0);48rootzp->z_unlinked = 0;49rootzp->z_atime_dirty = 0;5051- vp = ZTOV(rootzp);52- vp->v_type = VDIR;53- VN_LOCK_ASHARE(vp);54+ vnode.v_type = VDIR;55+ vnode.v_data = rootzp;56+ rootzp->z_vnode = &vnode;5758bzero(&zfsvfs, sizeof (zfsvfs_t));5960@@ -1539,16 +1542,10 @@ zfs_create_fs(objset_t *os, cred_t *cr, nvlist_t *61ASSERT(error == 0);62POINTER_INVALIDATE(&rootzp->z_zfsvfs);6364- VI_LOCK(vp);65- ZTOV(rootzp)->v_data = NULL;66- ZTOV(rootzp)->v_count = 0;67- ZTOV(rootzp)->v_holdcnt = 0;68- rootzp->z_vnode = NULL;69- VOP_UNLOCK(vp, 0);70- vdestroy(vp);71dmu_buf_rele(rootzp->z_dbuf, NULL);72rootzp->z_dbuf = NULL;73mutex_destroy(&zfsvfs.z_znodes_lock);74+ rootzp->z_vnode = NULL;75kmem_cache_free(znode_cache, rootzp);76}77787980