lkml.org 
[lkml]   [2021]   [Oct]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH] fs/ext4:bug fix of memory leak in ext4 mb pa alloc
Date
This patch try to fix bug reported by syzkaller:
BUG: memory leak
unreferenced object 0xffff888112a84a28 (size 104):
comm "kworker/u4:3", pid 948, jiffies 4294943272 (age 473.370s)
hex dump (first 32 bytes):
c0 53 8a 12 81 88 ff ff 22 01 00 00 00 00 ad de .S......".......
00 01 00 00 00 00 ad de 22 01 00 00 00 00 ad de ........".......
backtrace:
[<ffffffff817773cb>] kmem_cache_zalloc include/linux/slab.h:711 [inline]
[<ffffffff817773cb>] ext4_mb_pa_alloc fs/ext4/mballoc.c:5046 [inline]
[<ffffffff817773cb>] ext4_mb_new_blocks+0xd5b/0x18b0 fs/ext4/mballoc.c:5581
[<ffffffff81731d2d>] ext4_ext_map_blocks+0xdfd/0x2940 fs/ext4/extents.c:4250
[<ffffffff81754a03>] ext4_map_blocks+0x333/0xb10 fs/ext4/inode.c:637
[<ffffffff8175c22b>] mpage_map_one_extent fs/ext4/inode.c:2393 [inline]
[<ffffffff8175c22b>] mpage_map_and_submit_extent fs/ext4/inode.c:2446 [inline]
[<ffffffff8175c22b>] ext4_writepages+0xc8b/0x19c0 fs/ext4/inode.c:2798
[<ffffffff8145d19a>] do_writepages+0xfa/0x2a0 mm/page-writeback.c:2364
[<ffffffff815cbdbe>] __writeback_single_inode+0x6e/0x520 fs/fs-writeback.c:1616
[<ffffffff815cc924>] writeback_sb_inodes+0x2d4/0x710 fs/fs-writeback.c:1881
[<ffffffff815ccdbb>] __writeback_inodes_wb+0x5b/0x150 fs/fs-writeback.c:1950
[<ffffffff815cd2af>] wb_writeback+0x3ff/0x470 fs/fs-writeback.c:2055
[<ffffffff815ced0a>] wb_check_old_data_flush fs/fs-writeback.c:2155 [inline]
[<ffffffff815ced0a>] wb_do_writeback fs/fs-writeback.c:2208 [inline]
[<ffffffff815ced0a>] wb_workfn+0x3fa/0x760 fs/fs-writeback.c:2237
[<ffffffff81265d0f>] process_one_work+0x2cf/0x620 kernel/workqueue.c:2297
[<ffffffff81266619>] worker_thread+0x59/0x5d0 kernel/workqueue.c:2444
[<ffffffff8126fb18>] kthread+0x188/0x1d0 kernel/kthread.c:319
[<ffffffff810022cf>] ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:295

BUG: memory leak
unreferenced object 0xffff888112a84a90 (size 104):
comm "kworker/u4:3", pid 948, jiffies 4294943272 (age 473.370s)
hex dump (first 32 bytes):
98 98 8a 12 81 88 ff ff 22 01 00 00 00 00 ad de ........".......
00 01 00 00 00 00 ad de 22 01 00 00 00 00 ad de ........".......
backtrace:
[<ffffffff817773cb>] kmem_cache_zalloc include/linux/slab.h:711 [inline]
[<ffffffff817773cb>] ext4_mb_pa_alloc fs/ext4/mballoc.c:5046 [inline]
[<ffffffff817773cb>] ext4_mb_new_blocks+0xd5b/0x18b0 fs/ext4/mballoc.c:5581
[<ffffffff81731d2d>] ext4_ext_map_blocks+0xdfd/0x2940 fs/ext4/extents.c:4250
[<ffffffff81754a03>] ext4_map_blocks+0x333/0xb10 fs/ext4/inode.c:637
[<ffffffff8175c22b>] mpage_map_one_extent fs/ext4/inode.c:2393 [inline]
[<ffffffff8175c22b>] mpage_map_and_submit_extent fs/ext4/inode.c:2446 [inline]
[<ffffffff8175c22b>] ext4_writepages+0xc8b/0x19c0 fs/ext4/inode.c:2798
[<ffffffff8145d19a>] do_writepages+0xfa/0x2a0 mm/page-writeback.c:2364
[<ffffffff815cbdbe>] __writeback_single_inode+0x6e/0x520 fs/fs-writeback.c:1616
[<ffffffff815cc924>] writeback_sb_inodes+0x2d4/0x710 fs/fs-writeback.c:1881
[<ffffffff815ccdbb>] __writeback_inodes_wb+0x5b/0x150 fs/fs-writeback.c:1950
[<ffffffff815cd2af>] wb_writeback+0x3ff/0x470 fs/fs-writeback.c:2055
[<ffffffff815ced0a>] wb_check_old_data_flush fs/fs-writeback.c:2155 [inline]
[<ffffffff815ced0a>] wb_do_writeback fs/fs-writeback.c:2208 [inline]
[<ffffffff815ced0a>] wb_workfn+0x3fa/0x760 fs/fs-writeback.c:2237
[<ffffffff81265d0f>] process_one_work+0x2cf/0x620 kernel/workqueue.c:2297
[<ffffffff81266619>] worker_thread+0x59/0x5d0 kernel/workqueue.c:2444
[<ffffffff8126fb18>] kthread+0x188/0x1d0 kernel/kthread.c:319
[<ffffffff810022cf>] ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:295

The full link:
https://syzkaller.appspot.com/bug?id=6b3fa085566c7c8c64e32a6747c0a2b2c039e364

Signed-off-by: Bernard Zhao <bernard@vivo.com>
---
fs/ext4/mballoc.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
index 72bfac2d6dce..e767aacebdf0 100644
--- a/fs/ext4/mballoc.c
+++ b/fs/ext4/mballoc.c
@@ -5439,6 +5439,7 @@ static int ext4_mb_release_context(struct ext4_allocation_context *ac)
}

ext4_mb_put_pa(ac, ac->ac_sb, pa);
+ ext4_mb_pa_free(ac);
}
if (ac->ac_bitmap_page)
put_page(ac->ac_bitmap_page);
--
2.31.0
\
 
 \ /
  Last update: 2021-10-18 15:24    [W:0.037 / U:0.548 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site