Author: mav
Date: Fri Apr 19 15:44:45 2019
New Revision: 346390
URL: https://svnweb.freebsd.org/changeset/base/346390

Log:
  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.

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c       Fri Apr 
19 15:34:21 2019        (r346389)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c       Fri Apr 
19 15:44:45 2019        (r346390)
@@ -1655,7 +1655,9 @@ zfs_acl_ids_create(znode_t *dzp, int flag, vattr_t *va
                                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 *va
                                            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
                }
        }
 


_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to