linux-stable/drivers/regulator
ChiYuan Huang 8f3cbcd6b4
regulator: core: Use different devices for resource allocation and DT lookup
Following by the below discussion, there's the potential UAF issue
between regulator and mfd.
https://lore.kernel.org/all/20221128143601.1698148-1-yangyingliang@huawei.com/

From the analysis of Yingliang

CPU A				|CPU B
mt6370_probe()			|
  devm_mfd_add_devices()	|
				|mt6370_regulator_probe()
				|  regulator_register()
				|    //allocate init_data and add it to devres
				|    regulator_of_get_init_data()
i2c_unregister_device()		|
  device_del()			|
    devres_release_all()	|
      // init_data is freed	|
      release_nodes()		|
				|  // using init_data causes UAF
				|  regulator_register()

It's common to use mfd core to create child device for the regulator.
In order to do the DT lookup for init data, the child that registered
the regulator would pass its parent as the parameter. And this causes
init data resource allocated to its parent, not itself. The issue happen
when parent device is going to release and regulator core is still doing
some operation of init data constraint for the regulator of child device.

To fix it, this patch expand 'regulator_register' API to use the
different devices for init data allocation and DT lookup.

Reported-by: Yang Yingliang <yangyingliang@huawei.com>
Signed-off-by: ChiYuan Huang <cy_huang@richtek.com>
Link: https://lore.kernel.org/r/1670311341-32664-1-git-send-email-u0084500@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
2022-12-08 13:02:37 +00:00
..
88pg86x.c regulator: 88pg86x: Fix W=1 build warning when CONFIG_OF=n 2020-08-21 17:28:09 +01:00
88pm800-regulator.c
88pm8607.c
aat2870-regulator.c
ab8500-ext.c regulator: ab8500: Decomission platform data header 2021-01-13 11:36:19 +00:00
ab8500.c regulator: ab8500: Decomission platform data header 2021-01-13 11:36:19 +00:00
act8865-regulator.c regulator: act8865-regulator: Convert to i2c's .probe_new() 2022-11-24 13:54:00 +00:00
act8945a-regulator.c
ad5398.c regulator: ad5398: Convert to i2c's .probe_new() 2022-11-23 14:17:40 +00:00
anatop-regulator.c regulator: anatop: Constify anatop_core_rops 2020-06-18 13:47:31 +01:00
arizona-ldo1.c
arizona-micsupp.c regulator: arizona-micsupp: Don't use a common regulator name 2022-11-22 17:05:04 +00:00
as3711-regulator.c
as3722-regulator.c regulator: as3722: Fix fall-through warnings for Clang 2020-11-23 18:46:31 +00:00
atc260x-regulator.c regulator: atc260x: Fix missing active_discharge_on setting 2022-04-04 08:59:43 +01:00
axp20x-regulator.c regulator: axp20x: Fix reference cout leak 2021-01-20 18:48:20 +00:00
bcm590xx-regulator.c
bd718x7-regulator.c regulator: bd718x7: Use dev_err_probe() 2022-11-23 13:09:06 +00:00
bd9571mwv-regulator.c regulator: bd9571mwv: Convert device attribute to sysfs_emit() 2021-03-15 15:42:12 +00:00
bd9576-regulator.c regulator: bd71815: bd71828: bd9576: Use dev_err_probe() 2022-11-23 13:09:05 +00:00
bd71815-regulator.c regulator: bd71815: bd71828: bd9576: Use dev_err_probe() 2022-11-23 13:09:05 +00:00
bd71828-regulator.c regulator: bd71815: bd71828: bd9576: Use dev_err_probe() 2022-11-23 13:09:05 +00:00
core.c regulator: core: Use different devices for resource allocation and DT lookup 2022-12-08 13:02:37 +00:00
cpcap-regulator.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_30.RULE (part 2) 2022-06-10 14:51:35 +02:00
cros-ec-regulator.c platform/chrome: cros_ec_proto: Rename cros_ec_command function 2022-06-08 08:14:53 +00:00
da903x-regulator.c regulator: rename da903x to da903x-regulator 2020-06-25 15:29:21 +01:00
da9052-regulator.c regulator: da9052: Ensure enough delay time for .set_voltage_time_sel 2021-06-23 12:34:40 +01:00
da9055-regulator.c regulator: remove locking around regulator_notifier_call_chain() 2020-09-07 18:35:25 +01:00
da9062-regulator.c regulator: remove locking around regulator_notifier_call_chain() 2020-09-07 18:35:25 +01:00
da9063-regulator.c regulator: da9063: Add support for full-current mode. 2021-07-15 17:24:50 +01:00
da9121-regulator.c regulator: da9121-regulator: Convert to i2c's .probe_new() 2022-11-22 19:37:23 +00:00
da9121-regulator.h regulator: da9121: Add DA914x support 2021-11-30 13:08:18 +00:00
da9210-regulator.c regulator: remove locking around regulator_notifier_call_chain() 2020-09-07 18:35:25 +01:00
da9210-regulator.h
da9211-regulator.c regulator: remove locking around regulator_notifier_call_chain() 2020-09-07 18:35:25 +01:00
da9211-regulator.h
db8500-prcmu.c
dbx500-prcmu.c regulator: Replace symbolic permissions with octal permissions 2021-07-11 23:50:43 +01:00
dbx500-prcmu.h
devres.c regulator: core: Use different devices for resource allocation and DT lookup 2022-12-08 13:02:37 +00:00
dummy.c regulator: dummy: Use devm_regulator_register() 2021-09-27 13:01:20 +01:00
dummy.h
fan53555.c regulator: fan53555: Convert to i2c's .probe_new() 2022-11-24 13:54:02 +00:00
fan53880.c regulator: Drop obsolete dependencies on COMPILE_TEST 2022-11-24 16:30:19 +00:00
fixed-helper.c
fixed.c regulator: fixed: Remove print on allocation failure 2022-04-04 08:48:30 +01:00
gpio-regulator.c regulator: gpio: Add input_supply support in gpio_regulator_config 2022-09-29 15:20:14 +01:00
helpers.c regulator: Check ramp_delay_table for regulator_set_ramp_delay_regmap 2021-05-19 14:31:43 +01:00
hi655x-regulator.c regulator: hi655x: Fix pass wrong pointer to config.driver_data 2021-06-21 13:02:05 +01:00
hi6421-regulator.c regulator: hi6421: Fix getting wrong drvdata 2021-07-11 23:44:37 +01:00
hi6421v530-regulator.c regulator: Replace HTTP links with HTTPS ones 2020-07-22 14:43:48 +01:00
hi6421v600-regulator.c mfd: hi6421-spmi-pmic: Cleanup drvdata to only include regmap 2021-10-05 08:56:08 +01:00
internal.h regulator: devres: Add devm_regulator_bulk_get_exclusive() 2022-11-03 13:34:53 +00:00
irq_helpers.c regulator: irq_helper: Provide helper for trivial IRQ notifications 2021-11-24 12:57:30 +00:00
isl6271a-regulator.c regulator: isl6271a-regulator: Convert to i2c's .probe_new() 2022-11-24 13:54:03 +00:00
isl9305.c
Kconfig regulator: add mt6357 regulator 2022-12-02 12:23:19 +00:00
lm363x-regulator.c
lochnagar-regulator.c regulator: lochnagar: Add additional VDDCORE range 2020-09-07 18:49:13 +01:00
lp872x.c regulator: lp872x: Convert to i2c's .probe_new() 2022-11-23 14:17:41 +00:00
lp873x-regulator.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_319.RULE 2022-06-10 14:51:36 +02:00
lp3971.c
lp3972.c regulator: lp3972: Convert to i2c's .probe_new() 2022-11-22 19:37:25 +00:00
lp8755.c regulator: lp8755: Convert to i2c's .probe_new() 2022-11-22 19:37:25 +00:00
lp8788-buck.c
lp8788-ldo.c
lp87565-regulator.c mfd: lp87565: Move LP87565_regulator_id to .c file 2021-05-19 13:34:00 +01:00
ltc3589.c regulator: ltc3589: Convert to i2c's .probe_new() 2022-11-23 14:17:42 +00:00
ltc3676.c regulator: remove locking around regulator_notifier_call_chain() 2020-09-07 18:35:25 +01:00
Makefile regulator: add mt6357 regulator 2022-12-02 12:23:19 +00:00
max597x-regulator.c regulator: max597x: Remove the unneeded result variable 2022-08-24 12:21:30 +01:00
max1586.c regulator: max1586: Convert to i2c's .probe_new() 2022-11-22 19:37:26 +00:00
max8649.c regulator: max8649: Convert to i2c's .probe_new() 2022-11-22 19:37:27 +00:00
max8660.c regulator: max8660: Convert to i2c's .probe_new() 2022-11-23 14:17:43 +00:00
max8893.c regulator: max8893: add regulator driver 2021-06-21 13:07:44 +01:00
max8907-regulator.c regulator: max8907: Constify static structs 2020-06-18 13:47:34 +01:00
max8925-regulator.c
max8952.c regulator: max8952: Convert to i2c's .probe_new() 2022-11-22 19:37:28 +00:00
max8973-regulator.c regulator: max8973-regulator: Convert to i2c's .probe_new() 2022-11-23 14:17:44 +00:00
max8997-regulator.c regulator: max8997: Constify struct regulator_ops 2020-06-18 13:47:35 +01:00
max8998.c regulator: max8998: Staticify internal function max8998_get_current_limit() 2020-06-26 15:34:18 +01:00
max14577-regulator.c regulator: max14577: Revert "regulator: max14577: Add proper module aliases strings" 2021-09-17 13:16:38 +01:00
max20086-regulator.c regulator: MAX20086: add gpio/consumer.h 2022-01-19 16:47:39 +00:00
max77620-regulator.c regulator: max77620: Silence deferred probe error 2021-05-24 09:50:20 +01:00
max77650-regulator.c
max77686-regulator.c regulator: max77686: Convert to use regulator_set_ramp_delay_regmap 2021-06-07 16:24:07 +01:00
max77693-regulator.c
max77802-regulator.c regulator: max77802: Convert to use regulator_set_ramp_delay_regmap 2021-06-03 14:04:51 +01:00
max77826-regulator.c regulator: max77826: Fix W=1 build warning when CONFIG_OF=n 2020-08-21 17:28:15 +01:00
mc13xxx-regulator-core.c
mc13xxx.h
mc13783-regulator.c
mc13892-regulator.c regulator: mc13892-regulator: convert comma to semicolon 2020-12-11 13:23:07 +00:00
mcp16502.c regulator: mcp16502: Convert to use regulator_set_ramp_delay_regmap 2021-06-01 14:05:26 +01:00
mp886x.c regulator: Drop obsolete dependencies on COMPILE_TEST 2022-11-24 16:30:19 +00:00
mp5416.c regulator: mp5416: remove kernel.h include 2022-06-07 17:21:36 +01:00
mp8859.c
mpq7920.c
mpq7920.h
mt6311-regulator.c
mt6311-regulator.h
mt6315-regulator.c Merge remote-tracking branch 'regulator/for-5.14' into regulator-next 2021-06-23 16:56:31 +01:00
mt6323-regulator.c
mt6331-regulator.c regulator: Add driver for MT6331 PMIC regulators 2022-09-13 15:04:56 +01:00
mt6332-regulator.c regulator: Add driver for MT6332 PMIC regulators 2022-09-13 15:04:58 +01:00
mt6357-regulator.c regulator: add mt6357 regulator 2022-12-02 12:23:19 +00:00
mt6358-regulator.c regulator: mt6366: Add support for MT6366 regulator 2022-04-04 15:16:10 +01:00
mt6359-regulator.c regulator: mt6359: Remove shift fields from struct mt6359_regulator_info 2021-07-11 23:50:36 +01:00
mt6360-regulator.c regulator: mt6360: remove redundant error print 2021-03-24 19:50:21 +00:00
mt6370-regulator.c regulator: mt6370: Use the correct header for platform_device_id 2022-06-29 16:31:42 +01:00
mt6380-regulator.c regulator: mt6380: Fix unused array warning 2022-07-27 13:14:46 +01:00
mt6397-regulator.c regulator: mt6397: Remove modeset_shift from struct mt6397_regulator_info 2021-07-11 23:50:37 +01:00
mtk-dvfsrc-regulator.c regulator: mtk-dvfsrc: Fix wrong dev pointer for devm_regulator_register 2021-07-07 12:01:32 +01:00
of_regulator.c regulator: core: Use different devices for resource allocation and DT lookup 2022-12-08 13:02:37 +00:00
palmas-regulator.c
pbias-regulator.c regulator: Replace HTTP links with HTTPS ones 2020-07-22 14:43:48 +01:00
pca9450-regulator.c regulator: pca9450-regulator: Convert to i2c's .probe_new() 2022-11-22 19:37:29 +00:00
pcap-regulator.c
pcf50633-regulator.c
pf8x00-regulator.c regulator: pf8x00: Use regulator_map_voltage_ascend for pf8x00_buck7_ops 2021-03-10 12:47:46 +00:00
pfuze100-regulator.c regulator: pfuze100-regulator: Convert to i2c's .probe_new() 2022-11-24 13:54:08 +00:00
pv88060-regulator.c regulator: remove locking around regulator_notifier_call_chain() 2020-09-07 18:35:25 +01:00
pv88060-regulator.h
pv88080-regulator.c regulator: pv88080-regulator: Convert to i2c's .probe_new() 2022-11-24 13:54:09 +00:00
pv88080-regulator.h
pv88090-regulator.c regulator: remove locking around regulator_notifier_call_chain() 2020-09-07 18:35:25 +01:00
pv88090-regulator.h
pwm-regulator.c regulator: pwm-regulator: Make use of the helper function dev_err_probe() 2021-09-27 13:01:19 +01:00
qcom-labibb-regulator.c regulator: qcom-labibb: Fix missing of_node_put() in qcom_labibb_regulator_probe() 2022-12-07 14:19:18 +00:00
qcom-rpmh-regulator.c regulator: qcom-rpmh: Add support for PM8550 regulators 2022-11-23 16:08:35 +00:00
qcom_rpm-regulator.c regulator: qcom_rpm: Fix circular deferral regression 2022-09-09 22:27:12 +01:00
qcom_smd-regulator.c regulator: qcom_smd: Fix PMR735a S3 regulator spec 2022-11-10 12:52:29 +00:00
qcom_spmi-regulator.c regulator: qcom_spmi: Add PM6125 PMIC support 2022-08-23 18:07:56 +01:00
qcom_usb_vbus-regulator.c regulator: Add a routine to set the current limit for QCOM PMIC VBUS 2021-05-10 13:06:50 +01:00
rc5t583-regulator.c
rk808-regulator.c regulator: rk808: Use dev_err_probe 2022-11-28 13:04:41 +00:00
rn5t618-regulator.c
rohm-regulator.c regulator: rohm-regulator: add helper for restricted voltage setting 2021-11-18 13:57:47 +00:00
rpi-panel-attiny-regulator.c regulator: rpi-panel-attiny-regulator: Convert to i2c's .probe_new() 2022-11-22 19:37:30 +00:00
rt4801-regulator.c regulator: richtek,rt4801: parse GPIOs per regulator 2022-04-25 14:00:47 +01:00
rt4831-regulator.c regulator: rt4831: Add active_discharge_on to fix discharge API 2022-03-25 16:09:31 +00:00
rt5033-regulator.c regulator: rt5033: Use linear ranges to map all voltage selection 2021-07-11 23:50:39 +01:00
rt5120-regulator.c regulator: rt5120: Add PMIC regulator support 2022-06-23 13:07:50 +01:00
rt5190a-regulator.c regulator: rt5190a: check if init_data is NULL, bypass rt5190a_of_parse_cb 2022-06-06 12:39:10 +01:00
rt5759-regulator.c regulator: rt5759: Add support for Richtek RT5759 DCDC converter 2022-04-04 08:48:13 +01:00
rt6160-regulator.c regulator: rt6160: Fix setting suspend voltage 2021-06-16 15:41:16 +01:00
rt6190-regulator.c regulator: rt6190: Add support for Richtek RT6190 regulator 2022-11-02 14:38:36 +00:00
rt6245-regulator.c regulator: rt6245: make a const array func_base static, makes object smaller 2021-07-15 17:24:49 +01:00
rtmv20-regulator.c Merge existing fixes from regulator/for-5.14 2021-07-11 23:45:15 +01:00
rtq2134-regulator.c regulator: rtq2134: Fix missing active_discharge_on setting 2022-04-04 08:38:57 +01:00
rtq6752-regulator.c regulator: rtq6752: Enclose 'enable' gpio control by enable flag 2021-09-15 13:12:39 +01:00
s2mpa01.c regulator: s2mpa01: Drop initialization via platform data 2021-04-21 15:51:42 +01:00
s2mps11.c regulator: s2mps11: Drop initialization via platform data 2021-04-21 15:51:43 +01:00
s5m8767.c regulator: s5m8767: do not use reset value as DVS voltage if GPIO DVS is disabled 2021-10-08 17:24:30 +01:00
sc2731-regulator.c regulator: cleanup comments 2022-03-07 13:15:01 +00:00
scmi-regulator.c regulator: scmi: Add missing of_node_get() 2022-06-30 13:25:37 +01:00
sky81452-regulator.c
slg51000-regulator.c Merge series "Support ROHM BD9576MUF and BD9573MUF PMICs" from Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>: 2020-09-17 18:25:39 +01:00
slg51000-regulator.h
sm5703-regulator.c regulator: sm5703-regulator: Add regulators support for SM5703 MFD 2022-04-26 15:13:48 +01:00
stm32-booster.c regulator: stm32-booster: Fix W=1 build warning when CONFIG_OF=n 2020-08-21 17:28:20 +01:00
stm32-pwr.c regulator: stm32-pwr: Fix W=1 build warning when CONFIG_OF=n 2020-08-21 17:28:17 +01:00
stm32-vrefbuf.c regulator: core: Use different devices for resource allocation and DT lookup 2022-12-08 13:02:37 +00:00
stpmic1_regulator.c regulator: add property parsing and callbacks to set protection limits 2021-06-21 13:08:41 +01:00
stw481x-vmmc.c regulator: stw481x-vmmc: Constify static structs 2020-09-14 14:24:38 +01:00
sy7636a-regulator.c regulator: sy7636a: Remove requirement on sy7636a mfd 2022-02-08 09:27:28 +00:00
sy8106a-regulator.c regulator: Drop obsolete dependencies on COMPILE_TEST 2022-11-24 16:30:19 +00:00
sy8824x.c regulator: Drop obsolete dependencies on COMPILE_TEST 2022-11-24 16:30:19 +00:00
sy8827n.c regulator: Drop obsolete dependencies on COMPILE_TEST 2022-11-24 16:30:19 +00:00
ti-abb-regulator.c regulator: of: Fix kernel-doc 2022-09-19 15:44:17 +01:00
tps6105x-regulator.c regulator: tps6105x: Constify tps6105x_regulator_ops 2020-09-01 15:48:52 +01:00
tps6286x-regulator.c regulator: tps6286x-regulator: Convert to i2c's .probe_new() 2022-11-22 19:37:32 +00:00
tps6507x-regulator.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_30.RULE (part 2) 2022-06-10 14:51:35 +02:00
tps6524x-regulator.c
tps6586x-regulator.c regulator: tps6586x: Constify static regulator_ops 2020-09-01 15:48:56 +01:00
tps51632-regulator.c regulator: tps51632-regulator: Convert to i2c's .probe_new() 2022-11-22 19:37:31 +00:00
tps62360-regulator.c regulator: tps62360-regulator: Convert to i2c's .probe_new() 2022-11-23 14:17:45 +00:00
tps65023-regulator.c regulator: tps65023-regulator: Convert to i2c's .probe_new() 2022-11-23 14:17:46 +00:00
tps65086-regulator.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_319.RULE 2022-06-10 14:51:36 +02:00
tps65090-regulator.c regulator: tps65090: constify static regulator_ops 2020-09-01 15:48:55 +01:00
tps65132-regulator.c
tps65217-regulator.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_30.RULE (part 2) 2022-06-10 14:51:35 +02:00
tps65218-regulator.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_319.RULE 2022-06-10 14:51:36 +02:00
tps65219-regulator.c regulator: tps65219: Fix is_enabled checking in tps65219_set_bypass 2022-09-26 16:10:33 +01:00
tps65910-regulator.c regulator: tps65910: Silence deferred probe error 2021-07-11 23:50:38 +01:00
tps65912-regulator.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_319.RULE 2022-06-10 14:51:36 +02:00
tps68470-regulator.c regulator: Introduce tps68470-regulator driver 2021-12-15 22:16:53 +00:00
twl-regulator.c drivers/regulator: remove redundant ret variable 2021-12-13 19:35:43 +00:00
twl6030-regulator.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
uniphier-regulator.c regulator: uniphier: Add USB-VBUS compatible string for NX1 SoC 2021-10-21 16:08:07 +01:00
userspace-consumer.c regulator: userspace-consumer: Handle regulator-output DT nodes 2022-11-03 13:35:06 +00:00
vctrl-regulator.c regulator: vctrl: Use min() instead of doing it manually 2022-03-15 12:03:51 +00:00
vexpress-regulator.c
virtual.c regulator: virtual: add devicetree support 2022-03-02 13:45:31 +00:00
vqmmc-ipq4019-regulator.c regulator: vqmmc-ipq4019: Make use of the helper function devm_platform_ioremap_resource() 2021-09-13 01:59:24 +01:00
wm831x-dcdc.c regulator: remove locking around regulator_notifier_call_chain() 2020-09-07 18:35:25 +01:00
wm831x-isink.c regulator: remove locking around regulator_notifier_call_chain() 2020-09-07 18:35:25 +01:00
wm831x-ldo.c regulator: remove locking around regulator_notifier_call_chain() 2020-09-07 18:35:25 +01:00
wm8350-regulator.c regulator: cleanup comments 2022-03-07 13:15:01 +00:00
wm8400-regulator.c regulator: wm8400-regulator: Repair dodgy kerneldoc header formatting 2020-06-26 15:34:24 +01:00
wm8994-regulator.c regulator: wm8994: Add an off-on delay for WM8994 variant 2022-04-04 08:38:56 +01:00