Skip to content
Snippets Groups Projects
Commit cc4cc2fb authored by Colin Ian King's avatar Colin Ian King Committed by Greg Kroah-Hartman
Browse files

media: [next] staging: media: atomisp: fix memory leak of object flash

[ Upstream commit 6045b01d ]

In the case where the call to lm3554_platform_data_func returns an
error there is a memory leak on the error return path of object
flash.  Fix this by adding an error return path that will free
flash and rename labels fail2 to fail3 and fail1 to fail2.

Link: https://lore.kernel.org/linux-media/20200902165852.201155-1-colin.king@canonical.com


Fixes: 9289cdf3 ("staging: media: atomisp: Convert to GPIO descriptors")
Signed-off-by: default avatarColin Ian King <colin.king@canonical.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 99ce023b
No related branches found
No related tags found
No related merge requests found
......@@ -843,8 +843,10 @@ static int lm3554_probe(struct i2c_client *client)
return -ENOMEM;
flash->pdata = lm3554_platform_data_func(client);
if (IS_ERR(flash->pdata))
return PTR_ERR(flash->pdata);
if (IS_ERR(flash->pdata)) {
err = PTR_ERR(flash->pdata);
goto fail1;
}
v4l2_i2c_subdev_init(&flash->sd, client, &lm3554_ops);
flash->sd.internal_ops = &lm3554_internal_ops;
......@@ -856,7 +858,7 @@ static int lm3554_probe(struct i2c_client *client)
ARRAY_SIZE(lm3554_controls));
if (ret) {
dev_err(&client->dev, "error initialize a ctrl_handler.\n");
goto fail2;
goto fail3;
}
for (i = 0; i < ARRAY_SIZE(lm3554_controls); i++)
......@@ -865,14 +867,14 @@ static int lm3554_probe(struct i2c_client *client)
if (flash->ctrl_handler.error) {
dev_err(&client->dev, "ctrl_handler error.\n");
goto fail2;
goto fail3;
}
flash->sd.ctrl_handler = &flash->ctrl_handler;
err = media_entity_pads_init(&flash->sd.entity, 0, NULL);
if (err) {
dev_err(&client->dev, "error initialize a media entity.\n");
goto fail1;
goto fail2;
}
flash->sd.entity.function = MEDIA_ENT_F_FLASH;
......@@ -884,14 +886,15 @@ static int lm3554_probe(struct i2c_client *client)
err = lm3554_gpio_init(client);
if (err) {
dev_err(&client->dev, "gpio request/direction_output fail");
goto fail2;
goto fail3;
}
return atomisp_register_i2c_module(&flash->sd, NULL, LED_FLASH);
fail2:
fail3:
media_entity_cleanup(&flash->sd.entity);
v4l2_ctrl_handler_free(&flash->ctrl_handler);
fail1:
fail2:
v4l2_device_unregister_subdev(&flash->sd);
fail1:
kfree(flash);
return err;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment