diff options
author | Max Kellermann <max.kellermann@gmail.com> | 2016-08-09 18:32:11 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2016-11-18 15:02:39 -0200 |
commit | 1f4ed6cd58f36574237926f35bdec50116669909 (patch) | |
tree | 1c9da70bf6753eaa1c91ab7627d40b02f8f8a35f /drivers/media/dvb-core/dvbdev.h | |
parent | bd336e63441bcdeeccca6a698087d913a32478c5 (diff) | |
download | op-kernel-dev-1f4ed6cd58f36574237926f35bdec50116669909.zip op-kernel-dev-1f4ed6cd58f36574237926f35bdec50116669909.tar.gz |
[media] dvbdev: split dvb_unregister_device()
dvb_unregister_device() has a major problem: it combines unregistering
with memory disposal. Sometimes, it is necessary to unregister a
device, but no memory can be freed yet, because a process still has a
(stale) file handle. Therefore, we need to split
dvb_unregister_device(). This will allow sanitizing a few callers.
With my new design, dvb_unregister_device() appears misnamed, but to
reduce patch noise, I'm not renaming it just yet.
Signed-off-by: Max Kellermann <max.kellermann@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Diffstat (limited to 'drivers/media/dvb-core/dvbdev.h')
-rw-r--r-- | drivers/media/dvb-core/dvbdev.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/media/dvb-core/dvbdev.h b/drivers/media/dvb-core/dvbdev.h index 4aff7bd..576bbd4 100644 --- a/drivers/media/dvb-core/dvbdev.h +++ b/drivers/media/dvb-core/dvbdev.h @@ -212,8 +212,31 @@ int dvb_register_device(struct dvb_adapter *adap, int demux_sink_pads); /** + * dvb_remove_device - Remove a registered DVB device + * + * This does not free memory. To do that, call dvb_free_device(). + * + * @dvbdev: pointer to struct dvb_device + */ +void dvb_remove_device(struct dvb_device *dvbdev); + +/** + * dvb_free_device - Free memory occupied by a DVB device. + * + * Call dvb_unregister_device() before calling this function. + * + * @dvbdev: pointer to struct dvb_device + */ +void dvb_free_device(struct dvb_device *dvbdev); + +/** * dvb_unregister_device - Unregisters a DVB device * + * This is a combination of dvb_remove_device() and dvb_free_device(). + * Using this function is usually a mistake, and is often an indicator + * for a use-after-free bug (when a userspace process keeps a file + * handle to a detached device). + * * @dvbdev: pointer to struct dvb_device */ void dvb_unregister_device(struct dvb_device *dvbdev); |