mirror of
https://github.com/torvalds/linux
synced 2024-10-16 00:10:42 +00:00
[media] s5p-fimc: Fix wrong pointer dereference when unregistering sensors
After i2c_unregister_device() has been called the client object can already be freed and thus using the client pointer may lead to dereferencing freed memory. Avoid this by saving the adapter pointer for further use before i2c_unregister_device() call. Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
e067d5abdd
commit
7acde02a5b
|
@ -220,6 +220,7 @@ static struct v4l2_subdev *fimc_md_register_sensor(struct fimc_md *fmd,
|
|||
sd = v4l2_i2c_new_subdev_board(&fmd->v4l2_dev, adapter,
|
||||
s_info->pdata->board_info, NULL);
|
||||
if (IS_ERR_OR_NULL(sd)) {
|
||||
i2c_put_adapter(adapter);
|
||||
v4l2_err(&fmd->v4l2_dev, "Failed to acquire subdev\n");
|
||||
return NULL;
|
||||
}
|
||||
|
@ -234,12 +235,15 @@ static struct v4l2_subdev *fimc_md_register_sensor(struct fimc_md *fmd,
|
|||
static void fimc_md_unregister_sensor(struct v4l2_subdev *sd)
|
||||
{
|
||||
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||
struct i2c_adapter *adapter;
|
||||
|
||||
if (!client)
|
||||
return;
|
||||
v4l2_device_unregister_subdev(sd);
|
||||
adapter = client->adapter;
|
||||
i2c_unregister_device(client);
|
||||
i2c_put_adapter(client->adapter);
|
||||
if (adapter)
|
||||
i2c_put_adapter(adapter);
|
||||
}
|
||||
|
||||
static int fimc_md_register_sensor_entities(struct fimc_md *fmd)
|
||||
|
|
Loading…
Reference in a new issue