Hello,
attached patch should fix this. I'll queue it to my tree.
Honza
On Tue 22-12-20 02:24:18, syzbot wrote:
> Hello,
>
> syzbot found the following issue on:
>
> HEAD commit:8653b778 Merge tag 'clk-for-linus' of git://git.kernel.org..
> git tree: upstream
> console output: https://syzkaller.appspot.com/x/log.txt?x=153fc4db50
> kernel config: https://syzkaller.appspot.com/x/.config?x=faf2996955887e91
> dashboard link: https://syzkaller.appspot.com/bug?extid=9c9b52ab78154b08
> compiler: gcc (GCC) 10.1.0-syz 20200507
> syz repro: https://syzkaller.appspot.com/x/repro.syz?x=11c44960d0
> C reproducer: https://syzkaller.appspot.com/x/repro.c?x=13bc8c0b50
>
> IMPORTANT: if you fix the issue, please add the following tag to the commit:
> Reported-by: syzbot+9c9b52ab78154...@syzkaller.appspotmail.com
>
> BUG: memory leak
> unreferenced object 0x888110974f00 (size 64):
> comm "syz-executor849", pid 8516, jiffies 4294942501 (age 13.960s)
> hex dump (first 32 bytes):
> 00 30 ee 0d 81 88 ff ff 00 00 00 00 00 00 00 00 .0..
> 00 00 00 00 00 00 00 00 0a 00 00 00 48 00 00 00 H...
> backtrace:
> [<18aa1939>] kmalloc include/linux/slab.h:552 [inline]
> [<18aa1939>] v2_read_file_info+0x1ae/0x430 fs/quota/quota_v2.c:122
> [<1061252b>] dquot_load_quota_sb+0x351/0x650 fs/quota/dquot.c:2387
> [<6c1f70f9>] dquot_load_quota_inode fs/quota/dquot.c:2423 [inline]
> [<6c1f70f9>] dquot_load_quota_inode+0xda/0x160
> fs/quota/dquot.c:2415
> [] ext4_quota_enable fs/ext4/super.c:6362 [inline]
> [] ext4_enable_quotas+0x1b2/0x2f0 fs/ext4/super.c:6388
> [] ext4_fill_super+0x3bc5/0x5ac0 fs/ext4/super.c:5046
> [<03a869bd>] mount_bdev+0x223/0x260 fs/super.c:1366
> [<2138e18c>] legacy_get_tree+0x2b/0x90 fs/fs_context.c:592
> [<96e90d3d>] vfs_get_tree+0x28/0x100 fs/super.c:1496
> [] do_new_mount fs/namespace.c:2875 [inline]
> [] path_mount+0xc5e/0x1170 fs/namespace.c:3205
> [] do_mount fs/namespace.c:3218 [inline]
> [] __do_sys_mount fs/namespace.c:3426 [inline]
> [] __se_sys_mount fs/namespace.c:3403 [inline]
> [] __x64_sys_mount+0x18e/0x1d0 fs/namespace.c:3403
> [] do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
> [<7f651b8c>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
>
>
>
> ---
> This report is generated by a bot. It may contain errors.
> See https://goo.gl/tpsmEJ for more information about syzbot.
> syzbot engineers can be reached at syzkal...@googlegroups.com.
>
> syzbot will keep track of this issue. See:
> https://goo.gl/tpsmEJ#status for how to communicate with syzbot.
> syzbot can test patches for this issue, for details see:
> https://goo.gl/tpsmEJ#testing-patches
>
--
Jan Kara
SUSE Labs, CR
>From 4d76181dc109d8a0c8ce74325ee5e885734d5ab8 Mon Sep 17 00:00:00 2001
From: Jan Kara
Date: Tue, 22 Dec 2020 12:09:53 +0100
Subject: [PATCH] quota: Fix memory leak when handling corrupted quota file
When checking corrupted quota file we can bail out and leak allocated
info structure. Properly free info structure on error return.
Reported-by: syzbot+9c9b52ab78154...@syzkaller.appspotmail.com
Fixes: 11c514a99bb9 ("quota: Sanity-check quota file headers on load")
Signed-off-by: Jan Kara
---
fs/quota/quota_v2.c | 11 ---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/fs/quota/quota_v2.c b/fs/quota/quota_v2.c
index c21106557a37..b1467f3921c2 100644
--- a/fs/quota/quota_v2.c
+++ b/fs/quota/quota_v2.c
@@ -164,19 +164,24 @@ static int v2_read_file_info(struct super_block *sb, int type)
quota_error(sb, "Number of blocks too big for quota file size (%llu > %llu).",
(loff_t)qinfo->dqi_blocks << qinfo->dqi_blocksize_bits,
i_size_read(sb_dqopt(sb)->files[type]));
- goto out;
+ goto out_free;
}
if (qinfo->dqi_free_blk >= qinfo->dqi_blocks) {
quota_error(sb, "Free block number too big (%u >= %u).",
qinfo->dqi_free_blk, qinfo->dqi_blocks);
- goto out;
+ goto out_free;
}
if (qinfo->dqi_free_entry >= qinfo->dqi_blocks) {
quota_error(sb, "Block with free entry too big (%u >= %u).",
qinfo->dqi_free_entry, qinfo->dqi_blocks);
- goto out;
+ goto out_free;
}
ret = 0;
+out_free:
+ if (ret) {
+ kfree(info->dqi_priv);
+ info->dqi_priv = NULL;
+ }
out:
up_read(>dqio_sem);
return ret;
--
2.16.4