regulator: Fix possible nullpointer dereference in regulator_enable()
Heiko Stübner [Fri, 14 Oct 2011 16:00:29 +0000 (18:00 +0200)]
In the case where _regulator_enable returns an error it was not checked
if a supplying regulator exists before trying to disable it, leading
to a null pointer-dereference if no supplying regulator existed.

Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cherry-pick from main stream:
 commit d1685e4e2c3854782272f32b71f2f3eff5c6e0d0

Change-Id: Ie4d8db9184a65e6a98964259299bfc7daa0f4048
Reviewed-on: http://git-master/r/75908
Reviewed-by: Pavan Kunapuli <pkunapuli@nvidia.com>
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
Reviewed-on: http://git-master/r/76462
Reviewed-by: Automatic_Commit_Validation_User

drivers/regulator/core.c

index 79d670c..1b7d641 100644 (file)
@@ -1432,7 +1432,7 @@ int regulator_enable(struct regulator *regulator)
        ret = _regulator_enable(rdev);
        mutex_unlock(&rdev->mutex);
 
-       if (ret != 0)
+       if (ret != 0 && rdev->supply)
                regulator_disable(rdev->supply);
 
        return ret;