summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Szeredi <mszeredi@redhat.com>2016-06-29 08:26:59 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-07-27 08:42:23 -0700
commitd5af2e4f46114089298ecae619ba1dbcc04d0135 (patch)
tree339ea28c96fb0b6efcb8a4d4591abb55c521aa20
parent6fe5202594fa20e753dcd4bebf87a42d7784c46b (diff)
downloadlwn-d5af2e4f46114089298ecae619ba1dbcc04d0135.tar.gz
lwn-d5af2e4f46114089298ecae619ba1dbcc04d0135.zip
ovl: fix dentry leak for default_permissions
commit a4859d75944a726533ab86d24bb5ffd1b2b7d6cc upstream. 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") Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--fs/overlayfs/inode.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
index a4ff5d0d7db9..fe691b5684db 100644
--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
@@ -121,16 +121,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 */