Patch "block: Fix possible memory leak for rq_wb on add_disk failure" has been added to the 6.0-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    block: Fix possible memory leak for rq_wb on add_disk failure

to the 6.0-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     block-fix-possible-memory-leak-for-rq_wb-on-add_disk.patch
and it can be found in the queue-6.0 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 139b8b743770859b0194f8713151d5ce41939eae
Author: Chen Zhongjin <chenzhongjin@xxxxxxxxxx>
Date:   Sat Oct 29 15:13:55 2022 +0800

    block: Fix possible memory leak for rq_wb on add_disk failure
    
    [ Upstream commit fa81cbafbf5764ad5053512152345fab37a1fe18 ]
    
    kmemleak reported memory leaks in device_add_disk():
    
    kmemleak: 3 new suspected memory leaks
    
    unreferenced object 0xffff88800f420800 (size 512):
      comm "modprobe", pid 4275, jiffies 4295639067 (age 223.512s)
      hex dump (first 32 bytes):
        04 00 00 00 08 00 00 00 01 00 00 00 00 00 00 00  ................
        00 e1 f5 05 00 00 00 00 00 00 00 00 00 00 00 00  ................
      backtrace:
        [<00000000d3662699>] kmalloc_trace+0x26/0x60
        [<00000000edc7aadc>] wbt_init+0x50/0x6f0
        [<0000000069601d16>] wbt_enable_default+0x157/0x1c0
        [<0000000028fc393f>] blk_register_queue+0x2a4/0x420
        [<000000007345a042>] device_add_disk+0x6fd/0xe40
        [<0000000060e6aab0>] nbd_dev_add+0x828/0xbf0 [nbd]
        ...
    
    It is because the memory allocated in wbt_enable_default() is not
    released in device_add_disk() error path.
    Normally, these memory are freed in:
    
    del_gendisk()
      rq_qos_exit()
        rqos->ops->exit(rqos);
          wbt_exit()
    
    So rq_qos_exit() is called to free the rq_wb memory for wbt_init().
    However in the error path of device_add_disk(), only
    blk_unregister_queue() is called and make rq_wb memory leaked.
    
    Add rq_qos_exit() to the error path to fix it.
    
    Fixes: 83cbce957446 ("block: add error handling for device_add_disk / add_disk")
    Signed-off-by: Chen Zhongjin <chenzhongjin@xxxxxxxxxx>
    Reviewed-by: Christoph Hellwig <hch@xxxxxx>
    Link: https://lore.kernel.org/r/20221029071355.35462-1-chenzhongjin@xxxxxxxxxx
    Signed-off-by: Jens Axboe <axboe@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/block/genhd.c b/block/genhd.c
index 988ba52fd331..044ff97381e3 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -519,6 +519,7 @@ int __must_check device_add_disk(struct device *parent, struct gendisk *disk,
 		bdi_unregister(disk->bdi);
 out_unregister_queue:
 	blk_unregister_queue(disk);
+	rq_qos_exit(disk->queue);
 out_put_slave_dir:
 	kobject_put(disk->slave_dir);
 out_put_holder_dir:



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux