mfd: pcf50633: Fix some memory leaks in the error handling path of 'pcf50633_probe()'
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Wed, 14 Mar 2018 21:47:55 +0000 (22:47 +0100)
committerLee Jones <lee.jones@linaro.org>
Wed, 16 May 2018 08:21:48 +0000 (09:21 +0100)
If a 'platform_device_alloc()' call fails, we still need to release the
resources that have already been allocated before returning.

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
drivers/mfd/pcf50633-core.c

index f952dff6765f7d18b373e0a6dbb32c3fc103cf01..0d2a88d53eeda51f3adbb4114b819772bd644258 100644 (file)
@@ -242,8 +242,10 @@ static int pcf50633_probe(struct i2c_client *client,
 
        for (i = 0; i < PCF50633_NUM_REGULATORS; i++) {
                pdev = platform_device_alloc("pcf50633-regulator", i);
-               if (!pdev)
-                       return -ENOMEM;
+               if (!pdev) {
+                       ret = -ENOMEM;
+                       goto err2;
+               }
 
                pdev->dev.parent = pcf->dev;
                ret = platform_device_add_data(pdev, &pdata->reg_init_data[i],
@@ -269,6 +271,7 @@ static int pcf50633_probe(struct i2c_client *client,
 
 err:
        platform_device_put(pdev);
+err2:
        for (j = 0; j < i; j++)
                platform_device_put(pcf->regulator_pdev[j]);