Patch "perf: Fix possible memleak in pmu_dev_alloc()" has been added to the 5.4-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

    perf: Fix possible memleak in pmu_dev_alloc()

to the 5.4-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:
     perf-fix-possible-memleak-in-pmu_dev_alloc.patch
and it can be found in the queue-5.4 subdirectory.

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



commit 68cfdb2b24b1cfaca9c09ae078f09866f3a0182c
Author: Chen Zhongjin <chenzhongjin@xxxxxxxxxx>
Date:   Fri Nov 11 18:36:53 2022 +0800

    perf: Fix possible memleak in pmu_dev_alloc()
    
    [ Upstream commit e8d7a90c08ce963c592fb49845f2ccc606a2ac21 ]
    
    In pmu_dev_alloc(), when dev_set_name() failed, it will goto free_dev
    and call put_device(pmu->dev) to release it.
    However pmu->dev->release is assigned after this, which makes warning
    and memleak.
    Call dev_set_name() after pmu->dev->release = pmu_dev_release to fix it.
    
      Device '(null)' does not have a release() function...
      WARNING: CPU: 2 PID: 441 at drivers/base/core.c:2332 device_release+0x1b9/0x240
      ...
      Call Trace:
        <TASK>
        kobject_put+0x17f/0x460
        put_device+0x20/0x30
        pmu_dev_alloc+0x152/0x400
        perf_pmu_register+0x96b/0xee0
        ...
      kmemleak: 1 new suspected memory leaks (see /sys/kernel/debug/kmemleak)
      unreferenced object 0xffff888014759000 (size 2048):
        comm "modprobe", pid 441, jiffies 4294931444 (age 38.332s)
        backtrace:
          [<0000000005aed3b4>] kmalloc_trace+0x27/0x110
          [<000000006b38f9b8>] pmu_dev_alloc+0x50/0x400
          [<00000000735f17be>] perf_pmu_register+0x96b/0xee0
          [<00000000e38477f1>] 0xffffffffc0ad8603
          [<000000004e162216>] do_one_initcall+0xd0/0x4e0
          ...
    
    Fixes: abe43400579d ("perf: Sysfs enumeration")
    Signed-off-by: Chen Zhongjin <chenzhongjin@xxxxxxxxxx>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx>
    Link: https://lkml.kernel.org/r/20221111103653.91058-1-chenzhongjin@xxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/kernel/events/core.c b/kernel/events/core.c
index 0a54780e0942..a1c89b675b0b 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -10035,13 +10035,15 @@ static int pmu_dev_alloc(struct pmu *pmu)
 
 	pmu->dev->groups = pmu->attr_groups;
 	device_initialize(pmu->dev);
-	ret = dev_set_name(pmu->dev, "%s", pmu->name);
-	if (ret)
-		goto free_dev;
 
 	dev_set_drvdata(pmu->dev, pmu);
 	pmu->dev->bus = &pmu_bus;
 	pmu->dev->release = pmu_dev_release;
+
+	ret = dev_set_name(pmu->dev, "%s", pmu->name);
+	if (ret)
+		goto free_dev;
+
 	ret = device_add(pmu->dev);
 	if (ret)
 		goto free_dev;



[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