diff options
author | Guennadi Liakhovetski <g.liakhovetski@gmx.de> | 2011-03-23 09:26:11 +0100 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-04-13 14:55:06 +0200 |
commit | c8dd707805af100965c93cdca7d61e61165e9c07 (patch) | |
tree | 3e52f277690e46a58b45cd4c6a9f715ef4c989b0 /drivers/media/video/soc_camera.c | |
parent | [media] imx074: return a meaningful error code instead of -1 (diff) | |
download | linux-c8dd707805af100965c93cdca7d61e61165e9c07.tar.xz linux-c8dd707805af100965c93cdca7d61e61165e9c07.zip |
[media] soc-camera: don't dereference I2C client after it has been removed
i2c_unregister_device() frees the I2C client, so, dereferencing it
afterwards is a bug, that leads to Oopses.
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/soc_camera.c')
-rw-r--r-- | drivers/media/video/soc_camera.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/media/video/soc_camera.c b/drivers/media/video/soc_camera.c index 921993060d2f..3973f9a94753 100644 --- a/drivers/media/video/soc_camera.c +++ b/drivers/media/video/soc_camera.c @@ -996,10 +996,11 @@ static void soc_camera_free_i2c(struct soc_camera_device *icd) { struct i2c_client *client = to_i2c_client(to_soc_camera_control(icd)); + struct i2c_adapter *adap = client->adapter; dev_set_drvdata(&icd->dev, NULL); v4l2_device_unregister_subdev(i2c_get_clientdata(client)); i2c_unregister_device(client); - i2c_put_adapter(client->adapter); + i2c_put_adapter(adap); } #else #define soc_camera_init_i2c(icd, icl) (-ENODEV) |