mirror of https://gitee.com/openkylin/linux.git
[media] drivers/media/media-device: fix double free bug in _unregister()
While removing all interfaces in media_device_unregister(), all media_interface pointers are freed. This is illegal and results in double kfree() if any media_interface is still linked at this point; maybe because a userspace process still has a file handle. Once the process closes the file handle, dvb_media_device_free() gets called, which frees the dvb_device.intf_devnode again. This patch removes the unnecessary kfree() call, and documents who's responsible for really freeing it. Signed-off-by: Max Kellermann <max.kellermann@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:
parent
6753743e11
commit
e7cd17a29d
|
@ -801,9 +801,13 @@ void media_device_unregister(struct media_device *mdev)
|
|||
/* Remove all interfaces from the media device */
|
||||
list_for_each_entry_safe(intf, tmp_intf, &mdev->interfaces,
|
||||
graph_obj.list) {
|
||||
/*
|
||||
* Unlink the interface, but don't free it here; the
|
||||
* module which created it is responsible for freeing
|
||||
* it
|
||||
*/
|
||||
__media_remove_intf_links(intf);
|
||||
media_gobj_destroy(&intf->graph_obj);
|
||||
kfree(intf);
|
||||
}
|
||||
|
||||
mutex_unlock(&mdev->graph_mutex);
|
||||
|
|
Loading…
Reference in New Issue