Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d281b80c authored by Axel Lin's avatar Axel Lin Committed by Samuel Ortiz
Browse files

mfd: Fix memory leak in ab3100_otp_probe



In current implementation, there is a memory leak if ab3100_otp_read fail.
And in the case of ab3100_otp_init_debugfs fail, it does not properly remove
sysfs entries.
This patch properly handle above failure cases.

Signed-off-by: default avatarAxel Lin <axel.lin@gmail.com>
Acked-by: default avatarLinus Walleij <linus.walleij@stericsson.com>
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent 21f1fc38
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -199,7 +199,7 @@ static int __init ab3100_otp_probe(struct platform_device *pdev)

	err = ab3100_otp_read(otp);
	if (err)
		return err;
		goto err_otp_read;

	dev_info(&pdev->dev, "AB3100 OTP readout registered\n");

@@ -208,21 +208,21 @@ static int __init ab3100_otp_probe(struct platform_device *pdev)
		err = device_create_file(&pdev->dev,
					 &ab3100_otp_attrs[i]);
		if (err)
			goto out_no_sysfs;
			goto err_create_file;
	}

	/* debugfs entries */
	err = ab3100_otp_init_debugfs(&pdev->dev, otp);
	if (err)
		goto out_no_debugfs;
		goto err_init_debugfs;

	return 0;

out_no_sysfs:
	for (i = 0; i < ARRAY_SIZE(ab3100_otp_attrs); i++)
		device_remove_file(&pdev->dev,
				   &ab3100_otp_attrs[i]);
out_no_debugfs:
err_init_debugfs:
err_create_file:
	while (--i >= 0)
		device_remove_file(&pdev->dev, &ab3100_otp_attrs[i]);
err_otp_read:
	kfree(otp);
	return err;
}