Re: memory leak in v2_read_file_info

2020-12-22 Thread Jan Kara
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



memory leak in v2_read_file_info

2020-12-22 Thread syzbot
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