summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Weißschuh <linux@weissschuh.net>2024-06-04 23:41:24 +0200
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>2024-06-07 16:18:35 +0300
commitdd637f5cd5f334d2d014872544470031415cec3b (patch)
treef374fdda141554ac62a2f861e08df16b791ba182
parent4894c364d502d44d7979d272aa49e3ffaf12f05c (diff)
platform/x86: dell-pc: avoid double free and invalid unregistration
If platform_profile_register() fails it does kfree(thermal_handler) and leaves the pointer value around. Any call to thermal_cleanup() will try to kfree(thermal_handler) again. This will happen right away in dell_init(). In addition, platform_profile_remove() will be called although no profile is registered. NULL out the thermal_handler, so thermal_cleanup() avoids the double free. Fixes: 996ad4129810 ("platform/x86: dell-pc: Implement platform_profile") Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> Reviewed-by: Lyndon Sanche <lsanche@lyndeno.ca> Link: https://lore.kernel.org/r/20240604-dell-pc-double-free-v1-1-6d81255b2a44@weissschuh.net Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
-rw-r--r--drivers/platform/x86/dell/dell-pc.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/platform/x86/dell/dell-pc.c b/drivers/platform/x86/dell/dell-pc.c
index dfe09c463d03..972385ca1990 100644
--- a/drivers/platform/x86/dell/dell-pc.c
+++ b/drivers/platform/x86/dell/dell-pc.c
@@ -261,8 +261,10 @@ static int thermal_init(void)
/* Clean up if failed */
ret = platform_profile_register(thermal_handler);
- if (ret)
+ if (ret) {
kfree(thermal_handler);
+ thermal_handler = NULL;
+ }
return ret;
}