diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2019-10-25 07:03:11 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-12-13 10:51:01 +0300 |
commit | d4bc855afd2e1b93bbc94f67e98b8ce867d89f09 (patch) | |
tree | 975158078852b814a611b667f75214f3e49cad62 /fs/autofs | |
parent | c44d21f8227e3919d5282d861352a91957b6743c (diff) | |
download | linux-d4bc855afd2e1b93bbc94f67e98b8ce867d89f09.tar.xz |
autofs: fix a leak in autofs_expire_indirect()
[ Upstream commit 03ad0d703df75c43f78bd72e16124b5b94a95188 ]
if the second call of should_expire() in there ends up
grabbing and returning a new reference to dentry, we need
to drop it before continuing.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'fs/autofs')
-rw-r--r-- | fs/autofs/expire.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/autofs/expire.c b/fs/autofs/expire.c index 28d9c2b1b3bb..70e9afe589fb 100644 --- a/fs/autofs/expire.c +++ b/fs/autofs/expire.c @@ -501,9 +501,10 @@ static struct dentry *autofs_expire_indirect(struct super_block *sb, */ how &= ~AUTOFS_EXP_LEAVES; found = should_expire(expired, mnt, timeout, how); - if (!found || found != expired) - /* Something has changed, continue */ + if (found != expired) { // something has changed, continue + dput(found); goto next; + } if (expired != dentry) dput(dentry); |