diff options
author | Vishalsingh Hajeri <vhajeri@codeaurora.org> | 2018-08-31 14:32:33 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2018-10-07 23:36:53 -0700 |
commit | 61023d53cbd56c998edb0f8170c8898abc91c326 (patch) | |
tree | 33963f71ba586f7295dd8453c46279af2b5fb9d9 | |
parent | 29f75ab86e40961bbcf2b1747a00eafc8be3d6f7 (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.c | 12 |
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; } |