Patch "regulator: core: fix resource leak in regulator_register()" 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

    regulator: core: fix resource leak in regulator_register()

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:
     regulator-core-fix-resource-leak-in-regulator_regist.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 d4730700c7c0acadac1335442c5a4deb887b5150
Author: Yang Yingliang <yangyingliang@xxxxxxxxxx>
Date:   Fri Dec 2 10:51:11 2022 +0800

    regulator: core: fix resource leak in regulator_register()
    
    [ Upstream commit ba62319a42c50e6254e98b3f316464fac8e77968 ]
    
    I got some resource leak reports while doing fault injection test:
    
      OF: ERROR: memory leak, expected refcount 1 instead of 100,
      of_node_get()/of_node_put() unbalanced - destroy cset entry:
      attach overlay node /i2c/pmic@64/regulators/buck1
    
    unreferenced object 0xffff88810deea000 (size 512):
      comm "490-i2c-rt5190a", pid 253, jiffies 4294859840 (age 5061.046s)
      hex dump (first 32 bytes):
        00 00 00 00 ad 4e ad de ff ff ff ff 00 00 00 00  .....N..........
        ff ff ff ff ff ff ff ff a0 1e 00 a1 ff ff ff ff  ................
      backtrace:
        [<00000000d78541e2>] kmalloc_trace+0x21/0x110
        [<00000000b343d153>] device_private_init+0x32/0xd0
        [<00000000be1f0c70>] device_add+0xb2d/0x1030
        [<00000000e3e6344d>] regulator_register+0xaf2/0x12a0
        [<00000000e2f5e754>] devm_regulator_register+0x57/0xb0
        [<000000008b898197>] rt5190a_probe+0x52a/0x861 [rt5190a_regulator]
    
    unreferenced object 0xffff88810b617b80 (size 32):
      comm "490-i2c-rt5190a", pid 253, jiffies 4294859904 (age 5060.983s)
      hex dump (first 32 bytes):
        72 65 67 75 6c 61 74 6f 72 2e 32 38 36 38 2d 53  regulator.2868-S
        55 50 50 4c 59 00 ff ff 29 00 00 00 2b 00 00 00  UPPLY...)...+...
      backtrace:
        [<000000009da9280d>] __kmalloc_node_track_caller+0x44/0x1b0
        [<0000000025c6a4e5>] kstrdup+0x3a/0x70
        [<00000000790efb69>] create_regulator+0xc0/0x4e0
        [<0000000005ed203a>] regulator_resolve_supply+0x2d4/0x440
        [<0000000045796214>] regulator_register+0x10b3/0x12a0
        [<00000000e2f5e754>] devm_regulator_register+0x57/0xb0
        [<000000008b898197>] rt5190a_probe+0x52a/0x861 [rt5190a_regulator]
    
    After calling regulator_resolve_supply(), the 'rdev->supply' is set
    by set_supply(), after this set, in the error path, the resources
    need be released, so call regulator_put() to avoid the leaks.
    
    Fixes: aea6cb99703e ("regulator: resolve supply after creating regulator")
    Fixes: 8a866d527ac0 ("regulator: core: Resolve supply name earlier to prevent double-init")
    Signed-off-by: Yang Yingliang <yangyingliang@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20221202025111.496402-1-yangyingliang@xxxxxxxxxx
    Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 9b839dced470..4a93154bb574 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -5615,6 +5615,7 @@ regulator_register(const struct regulator_desc *regulator_desc,
 	regulator_remove_coupling(rdev);
 	mutex_unlock(&regulator_list_mutex);
 wash:
+	regulator_put(rdev->supply);
 	kfree(rdev->coupling_desc.coupled_rdevs);
 	mutex_lock(&regulator_list_mutex);
 	regulator_ena_gpio_free(rdev);



[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