Skip to content

Commit

Permalink
V4L/DVB (13132): fix use-after-free Oops, resulting from a driver-cor…
Browse files Browse the repository at this point in the history
…e API change

Commit b402843 has broken again re-use of
device objects across device_register() / device_unregister() cycles. Fix
soc-camera by nullifying the struct after device_unregister().

Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Guennadi Liakhovetski authored and Mauro Carvalho Chehab committed Nov 7, 2009
1 parent 07bc46e commit 76823b7
Showing 1 changed file with 9 additions and 7 deletions.
16 changes: 9 additions & 7 deletions drivers/media/video/soc_camera.c
Original file line number Diff line number Diff line change
Expand Up @@ -1160,13 +1160,15 @@ void soc_camera_host_unregister(struct soc_camera_host *ici)
if (icd->iface == ici->nr) {
/* The bus->remove will be called */
device_unregister(&icd->dev);
/* Not before device_unregister(), .remove
* needs parent to call ici->ops->remove() */
icd->dev.parent = NULL;

/* If the host module is loaded again, device_register()
* would complain "already initialised" */
memset(&icd->dev.kobj, 0, sizeof(icd->dev.kobj));
/*
* Not before device_unregister(), .remove
* needs parent to call ici->ops->remove().
* If the host module is loaded again, device_register()
* would complain "already initialised," since 2.6.32
* this is also needed to prevent use-after-free of the
* device private data.
*/
memset(&icd->dev, 0, sizeof(icd->dev));
}
}

Expand Down

0 comments on commit 76823b7

Please sign in to comment.