diff options
author | Guennadi Liakhovetski <g.liakhovetski@gmx.de> | 2011-03-23 05:26:11 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-04-13 09:55:06 -0300 |
commit | c8dd707805af100965c93cdca7d61e61165e9c07 (patch) | |
tree | 3e52f277690e46a58b45cd4c6a9f715ef4c989b0 | |
parent | 3e31f2b9456d0777a41d9d26429d6f2ad6894014 (diff) | |
download | op-kernel-dev-c8dd707805af100965c93cdca7d61e61165e9c07.zip op-kernel-dev-c8dd707805af100965c93cdca7d61e61165e9c07.tar.gz |
[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>
-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 9219930..3973f9a 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) |