diff options
author | Lothar Waßmann <LW@KARO-electronics.de> | 2011-11-28 09:38:37 -0500 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2011-11-28 09:44:38 -0500 |
commit | 58fb5cf5d1edb7e306574833ee55d732918c89e3 (patch) | |
tree | 56eeb31660956d2795ca068830c603d0d240c34b | |
parent | d4d6373c1109b11c8118340be97ae31b8f94d66a (diff) |
regulator: fix use after free bug
This is caused by dereferencing 'rdev' after device_unregister() in
the regulator_unregister() function. 'rdev' is freed by
device_unregister(), so it must not be dereferenced after this call.
[Edited commit message for legibility -- broonie]
Signed-off-by: Lothar Waßmann <LW@KARO-electronics.de>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r-- | drivers/regulator/core.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 669d02160221..938398f3e869 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c | |||
@@ -2799,8 +2799,8 @@ void regulator_unregister(struct regulator_dev *rdev) | |||
2799 | list_del(&rdev->list); | 2799 | list_del(&rdev->list); |
2800 | if (rdev->supply) | 2800 | if (rdev->supply) |
2801 | regulator_put(rdev->supply); | 2801 | regulator_put(rdev->supply); |
2802 | device_unregister(&rdev->dev); | ||
2803 | kfree(rdev->constraints); | 2802 | kfree(rdev->constraints); |
2803 | device_unregister(&rdev->dev); | ||
2804 | mutex_unlock(®ulator_list_mutex); | 2804 | mutex_unlock(®ulator_list_mutex); |
2805 | } | 2805 | } |
2806 | EXPORT_SYMBOL_GPL(regulator_unregister); | 2806 | EXPORT_SYMBOL_GPL(regulator_unregister); |