stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH AUTOSEL 5.15 01/24] power: supply: ab8500: Fix external_power_changed race
@ 2023-05-31 13:42 Sasha Levin
  2023-05-31 13:42 ` [PATCH AUTOSEL 5.15 02/24] power: supply: sc27xx: " Sasha Levin
                   ` (22 more replies)
  0 siblings, 23 replies; 24+ messages in thread
From: Sasha Levin @ 2023-05-31 13:42 UTC (permalink / raw)
  To: linux-kernel, stable
  Cc: Hans de Goede, Linus Walleij, Sebastian Reichel, Sasha Levin,
	sre, linux-pm

From: Hans de Goede <hdegoede@redhat.com>

[ Upstream commit a5299ce4e96f3e8930e9c051b28d8093ada87b08 ]

ab8500_btemp_external_power_changed() dereferences di->btemp_psy,
which gets sets in ab8500_btemp_probe() like this:

        di->btemp_psy = devm_power_supply_register(dev, &ab8500_btemp_desc,
                                                   &psy_cfg);

As soon as devm_power_supply_register() has called device_add()
the external_power_changed callback can get called. So there is a window
where ab8500_btemp_external_power_changed() may get called while
di->btemp_psy has not been set yet leading to a NULL pointer dereference.

Fixing this is easy. The external_power_changed callback gets passed
the power_supply which will eventually get stored in di->btemp_psy,
so ab8500_btemp_external_power_changed() can simply directly use
the passed in psy argument which is always valid.

And the same applies to ab8500_fg_external_power_changed().

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/power/supply/ab8500_btemp.c | 6 ++----
 drivers/power/supply/ab8500_fg.c    | 6 ++----
 2 files changed, 4 insertions(+), 8 deletions(-)

diff --git a/drivers/power/supply/ab8500_btemp.c b/drivers/power/supply/ab8500_btemp.c
index b6c9111d77d7d..896309d3cadfe 100644
--- a/drivers/power/supply/ab8500_btemp.c
+++ b/drivers/power/supply/ab8500_btemp.c
@@ -902,10 +902,8 @@ static int ab8500_btemp_get_ext_psy_data(struct device *dev, void *data)
  */
 static void ab8500_btemp_external_power_changed(struct power_supply *psy)
 {
-	struct ab8500_btemp *di = power_supply_get_drvdata(psy);
-
-	class_for_each_device(power_supply_class, NULL,
-		di->btemp_psy, ab8500_btemp_get_ext_psy_data);
+	class_for_each_device(power_supply_class, NULL, psy,
+			      ab8500_btemp_get_ext_psy_data);
 }
 
 /* ab8500 btemp driver interrupts and their respective isr */
diff --git a/drivers/power/supply/ab8500_fg.c b/drivers/power/supply/ab8500_fg.c
index 57799a8079d44..eb7eac23da70f 100644
--- a/drivers/power/supply/ab8500_fg.c
+++ b/drivers/power/supply/ab8500_fg.c
@@ -2384,10 +2384,8 @@ static int ab8500_fg_init_hw_registers(struct ab8500_fg *di)
  */
 static void ab8500_fg_external_power_changed(struct power_supply *psy)
 {
-	struct ab8500_fg *di = power_supply_get_drvdata(psy);
-
-	class_for_each_device(power_supply_class, NULL,
-		di->fg_psy, ab8500_fg_get_ext_psy_data);
+	class_for_each_device(power_supply_class, NULL, psy,
+			      ab8500_fg_get_ext_psy_data);
 }
 
 /**
-- 
2.39.2


^ permalink raw reply related	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2023-05-31 14:16 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-31 13:42 [PATCH AUTOSEL 5.15 01/24] power: supply: ab8500: Fix external_power_changed race Sasha Levin
2023-05-31 13:42 ` [PATCH AUTOSEL 5.15 02/24] power: supply: sc27xx: " Sasha Levin
2023-05-31 13:42 ` [PATCH AUTOSEL 5.15 03/24] power: supply: bq27xxx: Use mod_delayed_work() instead of cancel() + schedule() Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 04/24] ARM: dts: vexpress: add missing cache properties Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 05/24] tools: gpio: fix debounce_period_us output of lsgpio Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 06/24] power: supply: Ratelimit no data debug output Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 07/24] platform/x86: asus-wmi: Ignore WMI events with codes 0x7B, 0xC0 Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 08/24] regulator: Fix error checking for debugfs_create_dir Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 09/24] irqchip/gic-v3: Disable pseudo NMIs on Mediatek devices w/ firmware issues Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 10/24] power: supply: Fix logic checking if system is running from battery Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 11/24] ASoC: lpass: Fix for KASAN use_after_free out of bounds Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 12/24] btrfs: scrub: try harder to mark RAID56 block groups read-only Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 13/24] btrfs: handle memory allocation failure in btrfs_csum_one_bio Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 14/24] ASoC: soc-pcm: test if a BE can be prepared Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 15/24] parisc: Improve cache flushing for PCXL in arch_sync_dma_for_cpu() Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 16/24] parisc: Flush gatt writes and adjust gatt mask in parisc_agp_mask_memory() Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 17/24] MIPS: unhide PATA_PLATFORM Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 18/24] MIPS: Restore Au1300 support Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 19/24] MIPS: Alchemy: fix dbdma2 Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 20/24] mips: Move initrd_start check after initrd address sanitisation Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 21/24] ASoC: dwc: move DMA init to snd_soc_dai_driver probe() Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 22/24] xen/blkfront: Only check REQ_FUA for writes Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 23/24] drm:amd:amdgpu: Fix missing buffer object unlock in failure path Sasha Levin
2023-05-31 13:43 ` [PATCH AUTOSEL 5.15 24/24] NVMe: Add MAXIO 1602 to bogus nid list Sasha Levin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).