Re: [PATCH 2/3] drivers/media/media-entity: clear media_gobj.mdev in _destroy()

From: Sakari Ailus
Date: Fri Jun 17 2016 - 08:53:55 EST


Hi Max,

On Wed, Jun 15, 2016 at 10:15:07PM +0200, Max Kellermann wrote:
> media_gobj_destroy() may be called twice on one instance - once by
> media_device_unregister() and again by dvb_media_device_free(). The

Is that something that should really happen, and why? The same object should
not be unregistered more than once --- in many call paths gobj
unregistration is followed by kfree() on the gobj.

> function media_remove_intf_links() establishes and documents the
> convention that mdev==NULL means that the object is not registered,
> but nobody ever NULLs this variable. So this patch really implements
> this behavior, and adds another mdev==NULL check to
> media_gobj_destroy() to protect against double removal.
>
> Signed-off-by: Max Kellermann <max@xxxxxxxxxxx>
> ---
> drivers/media/media-entity.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c
> index d8a2299..9526338 100644
> --- a/drivers/media/media-entity.c
> +++ b/drivers/media/media-entity.c
> @@ -203,10 +203,16 @@ void media_gobj_destroy(struct media_gobj *gobj)
> {
> dev_dbg_obj(__func__, gobj);
>
> + /* Do nothing if the object is not linked. */
> + if (gobj->mdev == NULL)
> + return;
> +
> gobj->mdev->topology_version++;
>
> /* Remove the object from mdev list */
> list_del(&gobj->list);
> +
> + gobj->mdev = NULL;
> }
>
> int media_entity_pads_init(struct media_entity *entity, u16 num_pads,
>

--
Regards,

Sakari Ailus
e-mail: sakari.ailus@xxxxxx XMPP: sailus@xxxxxxxxxxxxxx