Commit 9177514
regulator: fix memory leak on error path of regulator_register()
The change corrects registration and deregistration on error path
of a regulator, the problem was manifested by a reported memory
leak on deferred probe:
as3722-regulator as3722-regulator: regulator 13 register failed -517
# cat /sys/kernel/debug/kmemleak
unreferenced object 0xecc43740 (size 64):
comm "swapper/0", pid 1, jiffies 4294937640 (age 712.880s)
hex dump (first 32 bytes):
72 65 67 75 6c 61 74 6f 72 2e 32 34 00 5a 5a 5a regulator.24.ZZZ
5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a 5a ZZZZZZZZZZZZZZZZ
backtrace:
[<0c4c3d1c>] __kmalloc_track_caller+0x15c/0x2c0
[<40c0ad48>] kvasprintf+0x64/0xd4
[<109abd29>] kvasprintf_const+0x70/0x84
[<c4215946>] kobject_set_name_vargs+0x34/0xa8
[<62282ea2>] dev_set_name+0x40/0x64
[<a39b6757>] regulator_register+0x3a4/0x1344
[<16a9543f>] devm_regulator_register+0x4c/0x84
[<51a4c6a1>] as3722_regulator_probe+0x294/0x754
...
The memory leak problem was introduced as a side ef another fix in
regulator_register() error path, I believe that the proper fix is
to decouple device_register() function into its two compounds and
initialize a struct device before assigning any values to its fields
and then using it before actual registration of a device happens.
This lets to call put_device() safely after initialization, and, since
now a release callback is called, kfree(rdev->constraints) shall be
removed to exclude a double free condition.
Fixes: a3cde95 ("regulator: core: fix regulator_register() error paths to properly release rdev")
Signed-off-by: Vladimir Zapolskiy <vz@mleia.com>
Cc: Wen Yang <wenyang@linux.alibaba.com>
Link: https://lore.kernel.org/r/20200724005013.23278-1-vz@mleia.com
Signed-off-by: Mark Brown <broonie@kernel.org>1 parent 2ca76b3 commit 9177514
1 file changed
Lines changed: 7 additions & 11 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5092 | 5092 | | |
5093 | 5093 | | |
5094 | 5094 | | |
5095 | | - | |
5096 | 5095 | | |
5097 | 5096 | | |
5098 | 5097 | | |
| |||
5221 | 5220 | | |
5222 | 5221 | | |
5223 | 5222 | | |
| 5223 | + | |
5224 | 5224 | | |
5225 | 5225 | | |
5226 | 5226 | | |
5227 | 5227 | | |
| 5228 | + | |
5228 | 5229 | | |
5229 | 5230 | | |
5230 | 5231 | | |
| |||
5275 | 5276 | | |
5276 | 5277 | | |
5277 | 5278 | | |
5278 | | - | |
5279 | | - | |
5280 | | - | |
5281 | | - | |
| 5279 | + | |
| 5280 | + | |
5282 | 5281 | | |
5283 | | - | |
5284 | 5282 | | |
5285 | 5283 | | |
5286 | 5284 | | |
| |||
5302 | 5300 | | |
5303 | 5301 | | |
5304 | 5302 | | |
5305 | | - | |
5306 | 5303 | | |
5307 | 5304 | | |
5308 | 5305 | | |
| 5306 | + | |
| 5307 | + | |
5309 | 5308 | | |
5310 | 5309 | | |
5311 | 5310 | | |
5312 | | - | |
5313 | | - | |
5314 | | - | |
5315 | | - | |
| 5311 | + | |
5316 | 5312 | | |
5317 | 5313 | | |
5318 | 5314 | | |
| |||
0 commit comments