]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ovl: fix dentry leak for default_permissions
authorMiklos Szeredi <mszeredi@redhat.com>
Wed, 29 Jun 2016 06:26:59 +0000 (08:26 +0200)
committerShan Hai <shan.hai@oracle.com>
Fri, 4 Aug 2017 05:45:50 +0000 (13:45 +0800)
When using the 'default_permissions' mount option, ovl_permission() on
non-directories was missing a dput(alias), resulting in "BUG Dentry still
in use".

Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Fixes: 8d3095f4ad47 ("ovl: default permissions")
Cc: <stable@vger.kernel.org> # v4.5+
Orabug: 26401569

(backport upstream commit a4859d75944a726533ab86d24bb5ffd1b2b7d6cc)

Signed-off-by: Shan Hai <shan.hai@oracle.com>
Reviewed-by: Somasundaram Krishnasamy <somasundaram.krishnasamy@oracle.com>
fs/overlayfs/inode.c

index 9d41fc376bc9d9d6663de8e486403dd4c33bd163..fd2a26acb4f44021a97856f4e50da7cd61ab0314 100644 (file)
@@ -128,16 +128,18 @@ int ovl_permission(struct inode *inode, int mask)
 
                err = vfs_getattr(&realpath, &stat);
                if (err)
-                       return err;
+                       goto out_dput;
 
+               err = -ESTALE;
                if ((stat.mode ^ inode->i_mode) & S_IFMT)
-                       return -ESTALE;
+                       goto out_dput;
 
                inode->i_mode = stat.mode;
                inode->i_uid = stat.uid;
                inode->i_gid = stat.gid;
 
-               return generic_permission(inode, mask);
+               err = generic_permission(inode, mask);
+               goto out_dput;
        }
 
        /* Careful in RCU walk mode */