aboutsummaryrefslogtreecommitdiff
path: root/sys/cddl/contrib/opensolaris
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2019-04-19 15:44:45 +0000
committerAlexander Motin <mav@FreeBSD.org>2019-04-19 15:44:45 +0000
commit48ecceba1e8ba9b15b3d13f1c71fad09d1be2fd6 (patch)
treec7d37b721d81014e2b9833f46a33dd7b0c23aa48 /sys/cddl/contrib/opensolaris
parent96ca24dc32a108a3b3967bfa24010418d16c34b8 (diff)
downloadsrc-48ecceba1e8ba9b15b3d13f1c71fad09d1be2fd6.tar.gz
src-48ecceba1e8ba9b15b3d13f1c71fad09d1be2fd6.zip
Change the way FreeBSD GID inheritance is hacked.
I believe previous ifdef caused NULL dereference in later zfs_log_create() on attempt to create file inside directory belonging to ephemeral group created on illumos, trying to write to log information about GID domain of the newly created file, inheriting the ephemeral GID. This patch reuses original illumos SGID code with exception that due to lack of ID mapping code on FreeBSD ephemeral GID will turn into GID_NOBODY by another ifdef inside zfs_fuid_map_id(). MFC after: 1 month Sponsored by: iXsystems, Inc.
Notes
Notes: svn path=/head/; revision=346390
Diffstat (limited to 'sys/cddl/contrib/opensolaris')
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c
index 7dfe6576423f..e0bc7422c5ad 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c
@@ -1655,7 +1655,9 @@ zfs_acl_ids_create(znode_t *dzp, int flag, vattr_t *vap, cred_t *cr,
acl_ids->z_fgid = 0;
}
if (acl_ids->z_fgid == 0) {
+#ifndef __FreeBSD_kernel__
if (dzp->z_mode & S_ISGID) {
+#endif
char *domain;
uint32_t rid;
@@ -1674,15 +1676,13 @@ zfs_acl_ids_create(znode_t *dzp, int flag, vattr_t *vap, cred_t *cr,
FUID_INDEX(acl_ids->z_fgid),
acl_ids->z_fgid, ZFS_GROUP);
}
+#ifndef __FreeBSD_kernel__
} else {
acl_ids->z_fgid = zfs_fuid_create_cred(zfsvfs,
ZFS_GROUP, cr, &acl_ids->z_fuidp);
-#ifdef __FreeBSD_kernel__
- gid = acl_ids->z_fgid = dzp->z_gid;
-#else
gid = crgetgid(cr);
-#endif
}
+#endif
}
}