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.
This commit is contained in:
parent
96ca24dc32
commit
48ecceba1e
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=346390
@ -1655,7 +1655,9 @@ zfs_acl_ids_create(znode_t *dzp, int flag, vattr_t *vap, cred_t *cr,
|
|||||||
acl_ids->z_fgid = 0;
|
acl_ids->z_fgid = 0;
|
||||||
}
|
}
|
||||||
if (acl_ids->z_fgid == 0) {
|
if (acl_ids->z_fgid == 0) {
|
||||||
|
#ifndef __FreeBSD_kernel__
|
||||||
if (dzp->z_mode & S_ISGID) {
|
if (dzp->z_mode & S_ISGID) {
|
||||||
|
#endif
|
||||||
char *domain;
|
char *domain;
|
||||||
uint32_t rid;
|
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),
|
FUID_INDEX(acl_ids->z_fgid),
|
||||||
acl_ids->z_fgid, ZFS_GROUP);
|
acl_ids->z_fgid, ZFS_GROUP);
|
||||||
}
|
}
|
||||||
|
#ifndef __FreeBSD_kernel__
|
||||||
} else {
|
} else {
|
||||||
acl_ids->z_fgid = zfs_fuid_create_cred(zfsvfs,
|
acl_ids->z_fgid = zfs_fuid_create_cred(zfsvfs,
|
||||||
ZFS_GROUP, cr, &acl_ids->z_fuidp);
|
ZFS_GROUP, cr, &acl_ids->z_fuidp);
|
||||||
#ifdef __FreeBSD_kernel__
|
|
||||||
gid = acl_ids->z_fgid = dzp->z_gid;
|
|
||||||
#else
|
|
||||||
gid = crgetgid(cr);
|
gid = crgetgid(cr);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user