Patch "driver core: fix resource leak in device_add()" has been added to the 5.15-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

    driver core: fix resource leak in device_add()

to the 5.15-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:
     driver-core-fix-resource-leak-in-device_add.patch
and it can be found in the queue-5.15 subdirectory.

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



commit d879c298886d41c43e30d78f29b20e9ba815ff53
Author: Zhengchao Shao <shaozhengchao@xxxxxxxxxx>
Date:   Wed Nov 23 09:20:42 2022 +0800

    driver core: fix resource leak in device_add()
    
    [ Upstream commit 6977b1a5d67097eaa4d02b0c126c04cc6e8917c0 ]
    
    When calling kobject_add() failed in device_add(), it will call
    cleanup_glue_dir() to free resource. But in kobject_add(),
    dev->kobj.parent has been set to NULL. This will cause resource leak.
    
    The process is as follows:
    device_add()
            get_device_parent()
                    class_dir_create_and_add()
                            kobject_add()           //kobject_get()
            ...
            dev->kobj.parent = kobj;
            ...
            kobject_add()           //failed, but set dev->kobj.parent = NULL
            ...
            glue_dir = get_glue_dir(dev)    //glue_dir = NULL, and goto
                                            //"Error" label
            ...
            cleanup_glue_dir()      //becaues glue_dir is NULL, not call
                                    //kobject_put()
    
    The preceding problem may cause insmod mac80211_hwsim.ko to failed.
    sysfs: cannot create duplicate filename '/devices/virtual/mac80211_hwsim'
    Call Trace:
    <TASK>
    dump_stack_lvl+0x8e/0xd1
    sysfs_warn_dup.cold+0x1c/0x29
    sysfs_create_dir_ns+0x224/0x280
    kobject_add_internal+0x2aa/0x880
    kobject_add+0x135/0x1a0
    get_device_parent+0x3d7/0x590
    device_add+0x2aa/0x1cb0
    device_create_groups_vargs+0x1eb/0x260
    device_create+0xdc/0x110
    mac80211_hwsim_new_radio+0x31e/0x4790 [mac80211_hwsim]
    init_mac80211_hwsim+0x48d/0x1000 [mac80211_hwsim]
    do_one_initcall+0x10f/0x630
    do_init_module+0x19f/0x5e0
    load_module+0x64b7/0x6eb0
    __do_sys_finit_module+0x140/0x200
    do_syscall_64+0x35/0x80
    entry_SYSCALL_64_after_hwframe+0x46/0xb0
    </TASK>
    kobject_add_internal failed for mac80211_hwsim with -EEXIST, don't try to
    register things with the same name in the same directory.
    
    Fixes: cebf8fd16900 ("driver core: fix race between creating/querying glue dir and its cleanup")
    Signed-off-by: Zhengchao Shao <shaozhengchao@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20221123012042.335252-1-shaozhengchao@xxxxxxxxxx
    Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/base/core.c b/drivers/base/core.c
index e6a7b93760e45..adf003a7e8d6a 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -3328,7 +3328,7 @@ int device_add(struct device *dev)
 	/* we require the name to be set before, and pass NULL */
 	error = kobject_add(&dev->kobj, dev->kobj.parent, NULL);
 	if (error) {
-		glue_dir = get_glue_dir(dev);
+		glue_dir = kobj;
 		goto Error;
 	}
 



[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