Patch "netdevsim: fix memory leak in nsim_drv_probe() when nsim_dev_resources_register() failed" 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

    netdevsim: fix memory leak in nsim_drv_probe() when nsim_dev_resources_register() failed

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:
     netdevsim-fix-memory-leak-in-nsim_drv_probe-when-nsi.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 913c1598f94227e70b9fa2634e61304aec80f11c
Author: Zhengchao Shao <shaozhengchao@xxxxxxxxxx>
Date:   Wed Oct 26 09:46:41 2022 +0800

    netdevsim: fix memory leak in nsim_drv_probe() when nsim_dev_resources_register() failed
    
    [ Upstream commit 6b1da9f7126f05e857da6db24c6a04aa7974d644 ]
    
    If some items in nsim_dev_resources_register() fail, memory leak will
    occur. The following is the memory leak information.
    
    unreferenced object 0xffff888074c02600 (size 128):
      comm "echo", pid 8159, jiffies 4294945184 (age 493.530s)
      hex dump (first 32 bytes):
        40 47 ea 89 ff ff ff ff 01 00 00 00 00 00 00 00  @G..............
        ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  ................
      backtrace:
        [<0000000011a31c98>] kmalloc_trace+0x22/0x60
        [<0000000027384c69>] devl_resource_register+0x144/0x4e0
        [<00000000a16db248>] nsim_drv_probe+0x37a/0x1260
        [<000000007d1f448c>] really_probe+0x20b/0xb10
        [<00000000c416848a>] __driver_probe_device+0x1b3/0x4a0
        [<00000000077e0351>] driver_probe_device+0x49/0x140
        [<0000000054f2465a>] __device_attach_driver+0x18c/0x2a0
        [<000000008538f359>] bus_for_each_drv+0x151/0x1d0
        [<0000000038e09747>] __device_attach+0x1c9/0x4e0
        [<00000000dd86e533>] bus_probe_device+0x1d5/0x280
        [<00000000839bea35>] device_add+0xae0/0x1cb0
        [<000000009c2abf46>] new_device_store+0x3b6/0x5f0
        [<00000000fb823d7f>] bus_attr_store+0x72/0xa0
        [<000000007acc4295>] sysfs_kf_write+0x106/0x160
        [<000000005f50cb4d>] kernfs_fop_write_iter+0x3a8/0x5a0
        [<0000000075eb41bf>] vfs_write+0x8f0/0xc80
    
    Fixes: 37923ed6b8ce ("netdevsim: Add simple FIB resource controller via devlink")
    Signed-off-by: Zhengchao Shao <shaozhengchao@xxxxxxxxxx>
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c
index e88f783c297e..f31af8f0c0d6 100644
--- a/drivers/net/netdevsim/dev.c
+++ b/drivers/net/netdevsim/dev.c
@@ -442,7 +442,7 @@ static int nsim_dev_resources_register(struct devlink *devlink)
 				     &params);
 	if (err) {
 		pr_err("Failed to register IPv4 top resource\n");
-		goto out;
+		goto err_out;
 	}
 
 	err = devl_resource_register(devlink, "fib", (u64)-1,
@@ -450,7 +450,7 @@ static int nsim_dev_resources_register(struct devlink *devlink)
 				     NSIM_RESOURCE_IPV4, &params);
 	if (err) {
 		pr_err("Failed to register IPv4 FIB resource\n");
-		return err;
+		goto err_out;
 	}
 
 	err = devl_resource_register(devlink, "fib-rules", (u64)-1,
@@ -458,7 +458,7 @@ static int nsim_dev_resources_register(struct devlink *devlink)
 				     NSIM_RESOURCE_IPV4, &params);
 	if (err) {
 		pr_err("Failed to register IPv4 FIB rules resource\n");
-		return err;
+		goto err_out;
 	}
 
 	/* Resources for IPv6 */
@@ -468,7 +468,7 @@ static int nsim_dev_resources_register(struct devlink *devlink)
 				     &params);
 	if (err) {
 		pr_err("Failed to register IPv6 top resource\n");
-		goto out;
+		goto err_out;
 	}
 
 	err = devl_resource_register(devlink, "fib", (u64)-1,
@@ -476,7 +476,7 @@ static int nsim_dev_resources_register(struct devlink *devlink)
 				     NSIM_RESOURCE_IPV6, &params);
 	if (err) {
 		pr_err("Failed to register IPv6 FIB resource\n");
-		return err;
+		goto err_out;
 	}
 
 	err = devl_resource_register(devlink, "fib-rules", (u64)-1,
@@ -484,7 +484,7 @@ static int nsim_dev_resources_register(struct devlink *devlink)
 				     NSIM_RESOURCE_IPV6, &params);
 	if (err) {
 		pr_err("Failed to register IPv6 FIB rules resource\n");
-		return err;
+		goto err_out;
 	}
 
 	/* Resources for nexthops */
@@ -492,8 +492,14 @@ static int nsim_dev_resources_register(struct devlink *devlink)
 				     NSIM_RESOURCE_NEXTHOPS,
 				     DEVLINK_RESOURCE_ID_PARENT_TOP,
 				     &params);
+	if (err) {
+		pr_err("Failed to register NEXTHOPS resource\n");
+		goto err_out;
+	}
+	return 0;
 
-out:
+err_out:
+	devl_resources_unregister(devlink);
 	return err;
 }
 



[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