ovl: fix dentry leak in ovl_indexdir_cleanup()
index dentry was not released when breaking out of the loop
due to index verification error.
Fixes: 415543d5c6
("ovl: cleanup bad and stale index entries on mount")
Cc: <stable@vger.kernel.org> # v4.13
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
Родитель
9f4ec904db
Коммит
dc7ab6773e
|
@ -988,6 +988,7 @@ int ovl_indexdir_cleanup(struct dentry *dentry, struct vfsmount *mnt,
|
|||
struct path *lowerstack, unsigned int numlower)
|
||||
{
|
||||
int err;
|
||||
struct dentry *index = NULL;
|
||||
struct inode *dir = dentry->d_inode;
|
||||
struct path path = { .mnt = mnt, .dentry = dentry };
|
||||
LIST_HEAD(list);
|
||||
|
@ -1007,8 +1008,6 @@ int ovl_indexdir_cleanup(struct dentry *dentry, struct vfsmount *mnt,
|
|||
|
||||
inode_lock_nested(dir, I_MUTEX_PARENT);
|
||||
list_for_each_entry(p, &list, l_node) {
|
||||
struct dentry *index;
|
||||
|
||||
if (p->name[0] == '.') {
|
||||
if (p->len == 1)
|
||||
continue;
|
||||
|
@ -1018,6 +1017,7 @@ int ovl_indexdir_cleanup(struct dentry *dentry, struct vfsmount *mnt,
|
|||
index = lookup_one_len(p->name, dentry, p->len);
|
||||
if (IS_ERR(index)) {
|
||||
err = PTR_ERR(index);
|
||||
index = NULL;
|
||||
break;
|
||||
}
|
||||
err = ovl_verify_index(index, lowerstack, numlower);
|
||||
|
@ -1029,7 +1029,9 @@ int ovl_indexdir_cleanup(struct dentry *dentry, struct vfsmount *mnt,
|
|||
break;
|
||||
}
|
||||
dput(index);
|
||||
index = NULL;
|
||||
}
|
||||
dput(index);
|
||||
inode_unlock(dir);
|
||||
out:
|
||||
ovl_cache_free(&list);
|
||||
|
|
Загрузка…
Ссылка в новой задаче