]> www.infradead.org Git - linux-platform-drivers-x86.git/commitdiff
spufs: fix bogosity in S_ISGID handling
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 23 Feb 2021 22:44:08 +0000 (17:44 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Sat, 13 Mar 2021 04:13:52 +0000 (23:13 -0500)
clearing everything *except* S_ISGID (including the S_IFDIR, among
other things) is wrong.  Just use init_inode_owner() and be done
with that...

Acked-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/powerpc/platforms/cell/spufs/inode.c

index b83a3670bd74e5c0c1295bf28b147a0e9a05caba..bed05b644c2c548693dc43a43260450fe699d4cd 100644 (file)
@@ -236,10 +236,7 @@ spufs_mkdir(struct inode *dir, struct dentry *dentry, unsigned int flags,
        if (!inode)
                return -ENOSPC;
 
-       if (dir->i_mode & S_ISGID) {
-               inode->i_gid = dir->i_gid;
-               inode->i_mode &= S_ISGID;
-       }
+       inode_init_owner(&init_user_ns, inode, dir, mode | S_IFDIR);
        ctx = alloc_spu_context(SPUFS_I(dir)->i_gang); /* XXX gang */
        SPUFS_I(inode)->i_ctx = ctx;
        if (!ctx) {
@@ -470,10 +467,7 @@ spufs_mkgang(struct inode *dir, struct dentry *dentry, umode_t mode)
                goto out;
 
        ret = 0;
-       if (dir->i_mode & S_ISGID) {
-               inode->i_gid = dir->i_gid;
-               inode->i_mode &= S_ISGID;
-       }
+       inode_init_owner(&init_user_ns, inode, dir, mode | S_IFDIR);
        gang = alloc_spu_gang();
        SPUFS_I(inode)->i_ctx = NULL;
        SPUFS_I(inode)->i_gang = gang;