aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVishalsingh Hajeri <vhajeri@codeaurora.org>2018-08-31 14:32:33 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2018-10-07 23:36:53 -0700
commit61023d53cbd56c998edb0f8170c8898abc91c326 (patch)
tree33963f71ba586f7295dd8453c46279af2b5fb9d9
parent29f75ab86e40961bbcf2b1747a00eafc8be3d6f7 (diff)
msm: camera: eeprom: set platform driver data to null
when kfree is called on ectrl structure during driver remove, there is a dangling pointer left in platform driver data and v4l2 subdevice. This change will assign these dangling pointers to NULL. Change-Id: If65ac2b5f6ac55a274df223ff4ea1b449c0809cf Signed-off-by: Vishalsingh Hajeri <vhajeri@codeaurora.org>
-rw-r--r--drivers/media/platform/msm/camera/cam_sensor_module/cam_eeprom/cam_eeprom_dev.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/media/platform/msm/camera/cam_sensor_module/cam_eeprom/cam_eeprom_dev.c b/drivers/media/platform/msm/camera/cam_sensor_module/cam_eeprom/cam_eeprom_dev.c
index b8c32d4ce3b77..519c8151e757a 100644
--- a/drivers/media/platform/msm/camera/cam_sensor_module/cam_eeprom/cam_eeprom_dev.c
+++ b/drivers/media/platform/msm/camera/cam_sensor_module/cam_eeprom/cam_eeprom_dev.c
@@ -261,9 +261,10 @@ static int cam_eeprom_i2c_driver_remove(struct i2c_client *client)
for (i = 0; i < soc_info->num_clk; i++)
devm_clk_put(soc_info->dev, soc_info->clk[i]);
- if (soc_private)
- kfree(soc_private);
-
+ mutex_destroy(&(e_ctrl->eeprom_mutex));
+ kfree(soc_private);
+ kfree(e_ctrl->io_master_info.cci_client);
+ v4l2_set_subdevdata(&e_ctrl->v4l2_dev_str.sd, NULL);
kfree(e_ctrl);
return 0;
@@ -394,6 +395,8 @@ static int cam_eeprom_spi_driver_remove(struct spi_device *sdev)
kfree(soc_private->power_info.gpio_num_info);
kfree(soc_private);
}
+ mutex_destroy(&(e_ctrl->eeprom_mutex));
+ v4l2_set_subdevdata(&e_ctrl->v4l2_dev_str.sd, NULL);
kfree(e_ctrl);
return 0;
@@ -489,8 +492,11 @@ static int cam_eeprom_platform_driver_remove(struct platform_device *pdev)
for (i = 0; i < soc_info->num_clk; i++)
devm_clk_put(soc_info->dev, soc_info->clk[i]);
+ mutex_destroy(&(e_ctrl->eeprom_mutex));
kfree(soc_info->soc_private);
kfree(e_ctrl->io_master_info.cci_client);
+ platform_set_drvdata(pdev, NULL);
+ v4l2_set_subdevdata(&e_ctrl->v4l2_dev_str.sd, NULL);
kfree(e_ctrl);
return 0;
}