From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f196.google.com ([209.85.192.196]:39555 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752126AbdLESDI (ORCPT ); Tue, 5 Dec 2017 13:03:08 -0500 Received: by mail-pf0-f196.google.com with SMTP id l24so716376pfj.6 for ; Tue, 05 Dec 2017 10:03:08 -0800 (PST) Message-ID: <1512496985.13217.6.camel@dubeyko.com> Subject: Re: [PATCH] hfsplus: honor setgid flag on directories From: Viacheslav Dubeyko To: "Ernesto A." =?ISO-8859-1?Q?Fern=E1ndez?= , linux-fsdevel@vger.kernel.org Cc: Al Viro , Andrew Morton Date: Tue, 05 Dec 2017 10:03:05 -0800 In-Reply-To: <20171204192705.GA6101@debian.home> References: <20171204192705.GA6101@debian.home> Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On Mon, 2017-12-04 at 16:27 -0300, Ernesto A. Fernández wrote: > When creating a file inside a directory that has the setgid flag set, > give the new file the group ID of the parent, and also the setgid > flag > if it is a directory itself. > Looks really good. I have no remarks. Reviewed-by: Vyacheslav Dubeyko Thanks, Vyacheslav Dubeyko. > Signed-off-by: Ernesto A. Fernández > --- >  fs/hfsplus/dir.c        | 4 ++-- >  fs/hfsplus/hfsplus_fs.h | 3 ++- >  fs/hfsplus/inode.c      | 7 +++---- >  fs/hfsplus/super.c      | 2 +- >  4 files changed, 8 insertions(+), 8 deletions(-) > > diff --git a/fs/hfsplus/dir.c b/fs/hfsplus/dir.c > index 92a28da..db827e0 100644 > --- a/fs/hfsplus/dir.c > +++ b/fs/hfsplus/dir.c > @@ -443,7 +443,7 @@ static int hfsplus_symlink(struct inode *dir, > struct dentry *dentry, >   int res = -ENOMEM; >   >   mutex_lock(&sbi->vh_mutex); > - inode = hfsplus_new_inode(dir->i_sb, S_IFLNK | S_IRWXUGO); > + inode = hfsplus_new_inode(dir->i_sb, dir, S_IFLNK | > S_IRWXUGO); >   if (!inode) >   goto out; >   > @@ -485,7 +485,7 @@ static int hfsplus_mknod(struct inode *dir, > struct dentry *dentry, >   int res = -ENOMEM; >   >   mutex_lock(&sbi->vh_mutex); > - inode = hfsplus_new_inode(dir->i_sb, mode); > + inode = hfsplus_new_inode(dir->i_sb, dir, mode); >   if (!inode) >   goto out; >   > diff --git a/fs/hfsplus/hfsplus_fs.h b/fs/hfsplus/hfsplus_fs.h > index 36ca6e17..8e03943 100644 > --- a/fs/hfsplus/hfsplus_fs.h > +++ b/fs/hfsplus/hfsplus_fs.h > @@ -477,7 +477,8 @@ extern const struct address_space_operations > hfsplus_aops; >  extern const struct address_space_operations hfsplus_btree_aops; >  extern const struct dentry_operations hfsplus_dentry_operations; >   > -struct inode *hfsplus_new_inode(struct super_block *sb, umode_t > mode); > +struct inode *hfsplus_new_inode(struct super_block *sb, struct inode > *dir, > + umode_t mode); >  void hfsplus_delete_inode(struct inode *inode); >  void hfsplus_inode_read_fork(struct inode *inode, >        struct hfsplus_fork_raw *fork); > diff --git a/fs/hfsplus/inode.c b/fs/hfsplus/inode.c > index 72801ca..671357e 100644 > --- a/fs/hfsplus/inode.c > +++ b/fs/hfsplus/inode.c > @@ -343,7 +343,8 @@ static const struct file_operations > hfsplus_file_operations = { >   .unlocked_ioctl = hfsplus_ioctl, >  }; >   > -struct inode *hfsplus_new_inode(struct super_block *sb, umode_t > mode) > +struct inode *hfsplus_new_inode(struct super_block *sb, struct inode > *dir, > + umode_t mode) >  { >   struct hfsplus_sb_info *sbi = HFSPLUS_SB(sb); >   struct inode *inode = new_inode(sb); > @@ -353,9 +354,7 @@ struct inode *hfsplus_new_inode(struct > super_block *sb, umode_t mode) >   return NULL; >   >   inode->i_ino = sbi->next_cnid++; > - inode->i_mode = mode; > - inode->i_uid = current_fsuid(); > - inode->i_gid = current_fsgid(); > + inode_init_owner(inode, dir, mode); >   set_nlink(inode, 1); >   inode->i_mtime = inode->i_atime = inode->i_ctime = > current_time(inode); >   > diff --git a/fs/hfsplus/super.c b/fs/hfsplus/super.c > index d5e6a71..8fc4327 100644 > --- a/fs/hfsplus/super.c > +++ b/fs/hfsplus/super.c > @@ -549,7 +549,7 @@ static int hfsplus_fill_super(struct super_block > *sb, void *data, int silent) >   >   if (!sbi->hidden_dir) { >   mutex_lock(&sbi->vh_mutex); > - sbi->hidden_dir = hfsplus_new_inode(sb, > S_IFDIR); > + sbi->hidden_dir = hfsplus_new_inode(sb, > root, S_IFDIR); >   if (!sbi->hidden_dir) { >   mutex_unlock(&sbi->vh_mutex); >   err = -ENOMEM;