linux-brain/drivers/power
Sudeep Holla 97294c24f8 power: vexpress: fix corruption in notifier registration
[ Upstream commit 09bebb1adb ]

Vexpress platforms provide two different restart handlers: SYS_REBOOT
that restart the entire system, while DB_RESET only restarts the
daughter board containing the CPU. DB_RESET is overridden by SYS_REBOOT
if it exists.

notifier_chain_register used in register_restart_handler by design
relies on notifiers to be registered once only, however vexpress restart
notifier can get registered twice. When this happen it corrupts list
of notifiers, as result some notifiers can be not called on proper
event, traverse on list can be cycled forever, and second unregister
can access already freed memory.

So far, since this was the only restart handler in the system, no issue
was observed even if the same notifier was registered twice. However
commit 6c5c0d48b6 ("watchdog: sp805: add restart handler") added
support for SP805 restart handlers and since the system under test
contains two vexpress restart and two SP805 watchdog instances, it was
observed that during the boot traversing the restart handler list looped
forever as there's a cycle in that list resulting in boot hang.

This patch fixes the issues by ensuring that the notifier is installed
only once.

Cc: Sebastian Reichel <sre@kernel.org>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Fixes: 46c99ac662 ("power/reset: vexpress: Register with kernel restart handler")
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-10-10 08:52:04 +02:00
..
avs PM / AVS: rockchip-io: Fix module autoload for OF platform driver 2015-10-14 02:38:53 +02:00
reset power: vexpress: fix corruption in notifier registration 2018-10-10 08:52:04 +02:00
88pm860x_battery.c 88pm860x_battery: Convert to using managed resources 2015-09-22 13:35:31 +02:00
88pm860x_charger.c power_supply: 88pm860x_charger: Do not call free_irq() twice 2015-05-29 16:06:10 +02:00
Kconfig Revert "power: bq27xxx_battery: Remove unneeded dependency in Kconfig" 2018-02-25 11:03:50 +01:00
Makefile - New Device Support 2015-11-06 10:23:50 -08:00
ab8500_bmdata.c ab8500_bmdata: Export abx500_res_to_temp tables for hwmon 2013-04-16 17:38:10 -07:00
ab8500_btemp.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
ab8500_charger.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
ab8500_fg.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
abx500_chargalg.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
apm_power.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
axp20x_usb_power.c power: Add an axp20x-usb-power driver 2015-09-22 13:35:28 +02:00
axp288_charger.c power: axp288_charger: fix for API change 2015-06-26 17:44:09 -07:00
axp288_fuel_gauge.c power: axp288_fuel_gauge: Constify platform_device_id 2015-05-23 19:44:14 +02:00
bq27xxx_battery.c power: bq27xxx_battery: mark some symbols __maybe_unused 2018-02-25 11:03:50 +01:00
bq2415x_charger.c bq2415x_charger: Fix null pointer dereference 2015-09-23 18:59:19 +02:00
bq24190_charger.c power: supply: bq24190_charger: Handle fault before status on interrupt 2017-05-14 13:32:54 +02:00
bq24257_charger.c power: bq24257: Fix use of uninitialized pointer bq->charger 2016-10-31 04:14:00 -06:00
bq24735-charger.c power_supply: bq24735: Convert to using managed resources 2015-07-27 16:09:53 +02:00
bq25890_charger.c power_supply: bq25890: use flags argument of devm_gpiod_get 2015-06-13 04:06:33 +02:00
charger-manager.c power_supply: charger-manager: add missing of_node_put 2015-10-15 10:55:44 +02:00
collie_battery.c power_supply: fix oops in collie_battery driver 2015-04-30 17:39:40 +02:00
da9030_battery.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
da9052-battery.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
da9150-charger.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
da9150-fg.c power: Add support for DA9150 Fuel-Gauge 2015-10-13 11:28:07 +01:00
ds2760_battery.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
ds2780_battery.c power: ds2780_battery: clean up eeprom read/write functions 2015-07-27 16:28:54 +02:00
ds2781_battery.c power: ds2781_battery: clean up eeprom read/write functions 2015-07-27 16:28:54 +02:00
ds2782_battery.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
generic-adc-battery.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
goldfish_battery.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
gpio-charger.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
intel_mid_battery.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
ipaq_micro_battery.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
isp1704_charger.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
jz4740-battery.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
lp8727_charger.c power:lp8727_charger: parsing child node after getting debounce-ms 2015-09-22 13:35:29 +02:00
lp8788-charger.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
ltc2941-battery-gauge.c power/ltc2941-battery-gauge.c: Use the devicetree node name as supply name 2015-07-24 16:52:24 +02:00
max8903_charger.c max8903_charger: Convert to using managed resources 2015-09-22 16:02:16 +02:00
max8925_power.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
max8997_charger.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
max8998_charger.c power_supply: max8998: Use devm_power_supply_register 2015-09-22 16:20:10 +02:00
max14577_charger.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
max17040_battery.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
max17042_battery.c power: supply: max17042_battery: fix model download bug. 2016-09-30 10:18:39 +02:00
max77693_charger.c drivers: max77693: Move state container to common header 2015-07-16 21:39:30 +01:00
olpc_battery.c power: olpc_battery: clean up eeprom read function 2015-07-27 16:28:54 +02:00
pcf50633-charger.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
pda_power.c power: supply: pda_power: move from timer to delayed_work 2018-03-24 10:58:45 +01:00
pm2301_charger.c power: Remove unnecessary MODULE_ALIAS() for I2C drivers 2015-09-22 13:35:30 +02:00
pm2301_charger.h power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
pmu_battery.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
power_supply.h device.h: cleanup users outside of linux/include (C files) 2012-03-11 14:27:37 -04:00
power_supply_core.c power_supply: power_supply_read_temp only if use_cnt > 0 2016-08-10 11:49:27 +02:00
power_supply_leds.c power_supply: Use wrappers to avoid races when registering power supply 2015-05-23 20:06:19 +02:00
power_supply_sysfs.c power_supply: sysfs: Bring back write to writeable properties 2015-06-10 16:10:59 +02:00
qcom_smbb.c power: qcom_smbb: test the correct variable 2015-09-24 22:35:24 +02:00
rt5033_battery.c power: Export I2C module alias information in missing drivers 2015-08-05 05:39:08 +02:00
rt9455_charger.c power: Remove unnecessary MODULE_ALIAS() for I2C drivers 2015-09-22 13:35:30 +02:00
rx51_battery.c rx51-battery: Set name to rx51-battery 2015-08-03 17:14:57 +02:00
s3c_adc_battery.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
sbs-battery.c sbs-battery: add option to always register battery 2015-06-10 16:18:46 +02:00
smb347-charger.c power: Remove unnecessary MODULE_ALIAS() for I2C drivers 2015-09-22 13:35:30 +02:00
test_power.c kernel/params: constify struct kernel_param_ops uses 2015-05-28 11:32:10 +09:30
tosa_battery.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
tps65090-charger.c tps65090-charger: Fix module autoload for OF platform driver 2015-09-22 16:03:37 +02:00
tps65217_charger.c power_supply: tps65217-charger: fix missing platform_set_drvdata() 2016-09-30 10:18:39 +02:00
twl4030_charger.c drivers: power: twl4030_charger: fix link problems when building as module 2015-09-26 19:10:09 +02:00
twl4030_madc_battery.c power: twl4030_madc_battery: Add missing MODULE_ALIAS 2015-04-06 19:39:57 +02:00
wm97xx_battery.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
wm831x_backup.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
wm831x_power.c wm831x_power: Use IRQF_ONESHOT to request threaded IRQs 2015-09-26 18:55:09 +02:00
wm8350_power.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00
z2_battery.c power_supply: Change ownership from driver to core 2015-03-13 23:15:51 +01:00