regulator: Fix memory leak in set_machine_constraints() error paths
PATCH v2 1/1 regulator: Fix memory leak in set_machine_constraints() error paths
Properly kfree rdev->constraints in all set_machine_constraints() error paths. Also properly kfree rdev->constraints in regulator_register() error paths.
Signed-off-by Axel Lin <[email protected]>
--- drivers/regulator/core.c | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-)
drivers/regulator/core.c +5 -4
@@ -787,7 +787,6 @@ static int machine_constraints_voltage(struct regulator_dev *rdev,if (ret <0 ) {rdev_err (rdev,"failed to apply %duV constraint\n" , rdev->constraints->min_uV); - rdev->constraints =NULL ;return ret; } }
@@ -873,7 +872,7 @@ static int machine_constraints_voltage(struct regulator_dev *rdev,static int set_machine_constraints (struct regulator_dev *rdev,const struct regulation_constraints *constraints) { -int ret =0 ; +int ret;struct regulator_ops *ops = rdev->desc->ops; rdev->constraints = kmemdup(constraints, sizeof(*constraints),
@@ -890,7 +889,6 @@ static int set_machine_constraints(struct regulator_dev *rdev, ret =suspend_prepare (rdev, rdev->constraints->initial_state);if (ret <0 ) {rdev_err (rdev,"failed to set suspend state\n" ); - rdev->constraints =NULL ; goto out; } }
@@ -917,13 +915,15 @@ static int set_machine_constraints(struct regulator_dev *rdev, ret = ops->enable (rdev);if (ret <0 ) {rdev_err (rdev,"failed to enable\n" ); - rdev->constraints =NULL ; goto out; } }print_constraints (rdev); +return 0 ; out: +kfree (rdev->constraints); + rdev->constraints =NULL ;return ret; }
@@ -2694,6 +2694,7 @@ unset_supplies:unset_regulator_supplies (rdev); scrub: +kfree (rdev->constraints);device_unregister (&rdev->dev);/* device core frees rdev */ rdev =ERR_PTR (ret);
Signature · 1 line
1.7.4.1