From: Max Kellermann Date: Tue, 9 Aug 2016 21:32:57 +0000 (+0200) Subject: [media] media-entity: clear media_gobj.mdev in _destroy() X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=6753743e11540b7fc54d03771458e2bd91ba411b;p=GitHub%2Fmoto-9609%2Fandroid_kernel_motorola_exynos9610.git [media] media-entity: clear media_gobj.mdev in _destroy() media_gobj_destroy() may be called twice on one instance - once by media_device_unregister() and again by dvb_media_device_free(). The 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 Signed-off-by: Mauro Carvalho Chehab --- diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c index c68239e60487..f9f723f5e4f0 100644 --- a/drivers/media/media-entity.c +++ b/drivers/media/media-entity.c @@ -205,10 +205,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,