summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordurgadoss.r@intel.com <durgadoss.r@intel.com>2013-10-01 18:38:00 (GMT)
committerZhang Rui <rui.zhang@intel.com>2013-10-14 05:11:09 (GMT)
commit732e4c8db99cb3125bd6865794ec8e3a998c4d6e (patch)
treec6cf8ad76b759bbd5dd2e44579274dc4311fc3cb
parenta822794886e9746b30b62d11e594865bcc7a0988 (diff)
downloadlinux-732e4c8db99cb3125bd6865794ec8e3a998c4d6e.tar.xz
Thermal: Check for validity before doing kfree
The thermal_release function is called whenever any device belonging to 'thermal' class unregisters. This function performs kfree(cdev) without any check. In cases where there are more device registrations other than just 'thermal_zone' and 'cooling_device' this might accidently free memory allocated them silently; and cause memory errors. This patch changes this behavior by doing kfree(cdev) only when the device pointer belongs to a real cdev i.e. cooling_device. Signed-off-by: Durgadoss R <durgadoss.r@intel.com> Signed-off-by: Zhang Rui <rui.zhang@intel.com>
-rw-r--r--drivers/thermal/thermal_core.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index 4962a6a..db99b33 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -1038,7 +1038,8 @@ static void thermal_release(struct device *dev)
sizeof("thermal_zone") - 1)) {
tz = to_thermal_zone(dev);
kfree(tz);
- } else {
+ } else if(!strncmp(dev_name(dev), "cooling_device",
+ sizeof("cooling_device") - 1)){
cdev = to_cooling_device(dev);
kfree(cdev);
}