summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2020-03-04 14:01:44 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-10-29 09:03:11 +0100
commit52f5b7387dc017aaf54bfc64d7d4931e5467abf9 (patch)
tree04f92452e983d8081a4e5b03dc4c942edf1053a1
parente006d8ed726195fb6dc98ba301582452febd6831 (diff)
downloadlinux-stable-52f5b7387dc017aaf54bfc64d7d4931e5467abf9.tar.gz
linux-stable-52f5b7387dc017aaf54bfc64d7d4931e5467abf9.tar.bz2
linux-stable-52f5b7387dc017aaf54bfc64d7d4931e5467abf9.zip
reiserfs: Fix memory leak in reiserfs_parse_options()
[ Upstream commit e9d4709fcc26353df12070566970f080e651f0c9 ] When a usrjquota or grpjquota mount option is used multiple times, we will leak memory allocated for the file name. Make sure the last setting is used and all the previous ones are properly freed. Reported-by: syzbot+c9e294bbe0333a6b7640@syzkaller.appspotmail.com Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Sasha Levin <sashal@kernel.org>
-rw-r--r--fs/reiserfs/super.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c
index f9796fd51531..503d8c06e0d9 100644
--- a/fs/reiserfs/super.c
+++ b/fs/reiserfs/super.c
@@ -1232,6 +1232,10 @@ static int reiserfs_parse_options(struct super_block *s,
"turned on.");
return 0;
}
+ if (qf_names[qtype] !=
+ REISERFS_SB(s)->s_qf_names[qtype])
+ kfree(qf_names[qtype]);
+ qf_names[qtype] = NULL;
if (*arg) { /* Some filename specified? */
if (REISERFS_SB(s)->s_qf_names[qtype]
&& strcmp(REISERFS_SB(s)->s_qf_names[qtype],
@@ -1261,10 +1265,6 @@ static int reiserfs_parse_options(struct super_block *s,
else
*mount_options |= 1 << REISERFS_GRPQUOTA;
} else {
- if (qf_names[qtype] !=
- REISERFS_SB(s)->s_qf_names[qtype])
- kfree(qf_names[qtype]);
- qf_names[qtype] = NULL;
if (qtype == USRQUOTA)
*mount_options &= ~(1 << REISERFS_USRQUOTA);
else