Patch "vdpa_sim: fix possible memory leak in vdpasim_net_init() and vdpasim_blk_init()" 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

    vdpa_sim: fix possible memory leak in vdpasim_net_init() and vdpasim_blk_init()

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:
     vdpa_sim-fix-possible-memory-leak-in-vdpasim_net_ini.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 04718cb154c12216999ea85aa29a73d4a9fddbfc
Author: ruanjinjie <ruanjinjie@xxxxxxxxxx>
Date:   Thu Nov 10 16:23:48 2022 +0800

    vdpa_sim: fix possible memory leak in vdpasim_net_init() and vdpasim_blk_init()
    
    [ Upstream commit aeca7ff254843d49a8739f07f7dab1341450111d ]
    
    Inject fault while probing module, if device_register() fails in
    vdpasim_net_init() or vdpasim_blk_init(), but the refcount of kobject is
    not decreased to 0, the name allocated in dev_set_name() is leaked.
    Fix this by calling put_device(), so that name can be freed in
    callback function kobject_cleanup().
    
    (vdpa_sim_net)
    unreferenced object 0xffff88807eebc370 (size 16):
      comm "modprobe", pid 3848, jiffies 4362982860 (age 18.153s)
      hex dump (first 16 bytes):
        76 64 70 61 73 69 6d 5f 6e 65 74 00 6b 6b 6b a5  vdpasim_net.kkk.
      backtrace:
        [<ffffffff8174f19e>] __kmalloc_node_track_caller+0x4e/0x150
        [<ffffffff81731d53>] kstrdup+0x33/0x60
        [<ffffffff83a5d421>] kobject_set_name_vargs+0x41/0x110
        [<ffffffff82d87aab>] dev_set_name+0xab/0xe0
        [<ffffffff82d91a23>] device_add+0xe3/0x1a80
        [<ffffffffa0270013>] 0xffffffffa0270013
        [<ffffffff81001c27>] do_one_initcall+0x87/0x2e0
        [<ffffffff813739cb>] do_init_module+0x1ab/0x640
        [<ffffffff81379d20>] load_module+0x5d00/0x77f0
        [<ffffffff8137bc40>] __do_sys_finit_module+0x110/0x1b0
        [<ffffffff83c4d505>] do_syscall_64+0x35/0x80
        [<ffffffff83e0006a>] entry_SYSCALL_64_after_hwframe+0x46/0xb0
    
    (vdpa_sim_blk)
    unreferenced object 0xffff8881070c1250 (size 16):
      comm "modprobe", pid 6844, jiffies 4364069319 (age 17.572s)
      hex dump (first 16 bytes):
        76 64 70 61 73 69 6d 5f 62 6c 6b 00 6b 6b 6b a5  vdpasim_blk.kkk.
      backtrace:
        [<ffffffff8174f19e>] __kmalloc_node_track_caller+0x4e/0x150
        [<ffffffff81731d53>] kstrdup+0x33/0x60
        [<ffffffff83a5d421>] kobject_set_name_vargs+0x41/0x110
        [<ffffffff82d87aab>] dev_set_name+0xab/0xe0
        [<ffffffff82d91a23>] device_add+0xe3/0x1a80
        [<ffffffffa0220013>] 0xffffffffa0220013
        [<ffffffff81001c27>] do_one_initcall+0x87/0x2e0
        [<ffffffff813739cb>] do_init_module+0x1ab/0x640
        [<ffffffff81379d20>] load_module+0x5d00/0x77f0
        [<ffffffff8137bc40>] __do_sys_finit_module+0x110/0x1b0
        [<ffffffff83c4d505>] do_syscall_64+0x35/0x80
        [<ffffffff83e0006a>] entry_SYSCALL_64_after_hwframe+0x46/0xb0
    
    Fixes: 899c4d187f6a ("vdpa_sim_blk: add support for vdpa management tool")
    Fixes: a3c06ae158dd ("vdpa_sim_net: Add support for user supported devices")
    
    Signed-off-by: ruanjinjie <ruanjinjie@xxxxxxxxxx>
    Reviewed-by: Stefano Garzarella <sgarzare@xxxxxxxxxx>
    Message-Id: <20221110082348.4105476-1-ruanjinjie@xxxxxxxxxx>
    Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx>
    Acked-by: Jason Wang <jasowang@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c b/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
index c8bfea3b7db2..cc0534f8ae93 100644
--- a/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
+++ b/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c
@@ -427,8 +427,10 @@ static int __init vdpasim_blk_init(void)
 	int ret;
 
 	ret = device_register(&vdpasim_blk_mgmtdev);
-	if (ret)
+	if (ret) {
+		put_device(&vdpasim_blk_mgmtdev);
 		return ret;
+	}
 
 	ret = vdpa_mgmtdev_register(&mgmt_dev);
 	if (ret)
diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim_net.c b/drivers/vdpa/vdpa_sim/vdpa_sim_net.c
index 886449e88502..c2e19dd06419 100644
--- a/drivers/vdpa/vdpa_sim/vdpa_sim_net.c
+++ b/drivers/vdpa/vdpa_sim/vdpa_sim_net.c
@@ -304,8 +304,10 @@ static int __init vdpasim_net_init(void)
 	int ret;
 
 	ret = device_register(&vdpasim_net_mgmtdev);
-	if (ret)
+	if (ret) {
+		put_device(&vdpasim_net_mgmtdev);
 		return ret;
+	}
 
 	ret = vdpa_mgmtdev_register(&mgmt_dev);
 	if (ret)



[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