summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorVasiliy Kulikov <segoon@openwall.com>2010-11-19 21:41:58 +0300
committerAnton Vorontsov <cbouatmailru@gmail.com>2010-12-22 02:39:55 +0300
commit3a2dbd611b38cf9a026c0099a85701ad183d1949 (patch)
treeb6d181ab33effdcd0e0466ee583c0e224563e372 /drivers
parent26eb387265872b59566ddeed5e9bf142a6b9ff5b (diff)
downloadlinux-3a2dbd611b38cf9a026c0099a85701ad183d1949.tar.gz
linux-3a2dbd611b38cf9a026c0099a85701ad183d1949.tar.bz2
linux-3a2dbd611b38cf9a026c0099a85701ad183d1949.zip
power_supply: Fix use after free and memory leak
device_unregister() might free its argument. This leads to freed memory use in kfree(). Also use put_device() instead of kfree() as dev may be already used in another layer after call to device_add(). Signed-off-by: Vasiliy Kulikov <segoon@openwall.com> Signed-off-by: Anton Vorontsov <cbouatmailru@gmail.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/power/power_supply_core.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/power/power_supply_core.c b/drivers/power/power_supply_core.c
index 91606bb55318..f06bad047d76 100644
--- a/drivers/power/power_supply_core.c
+++ b/drivers/power/power_supply_core.c
@@ -190,10 +190,10 @@ int power_supply_register(struct device *parent, struct power_supply *psy)
goto success;
create_triggers_failed:
- device_unregister(psy->dev);
+ device_del(dev);
kobject_set_name_failed:
device_add_failed:
- kfree(dev);
+ put_device(dev);
success:
return rc;
}