From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932713AbcEKPk1 (ORCPT ); Wed, 11 May 2016 11:40:27 -0400 Received: from mout.kundenserver.de ([217.72.192.75]:54643 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932517AbcEKPkW (ORCPT ); Wed, 11 May 2016 11:40:22 -0400 From: Alban Bedel To: linux-media@vger.kernel.org Cc: Mauro Carvalho Chehab , Javier Martinez Canillas , Sakari Ailus , Bryan Wu , linux-kernel@vger.kernel.org, Alban Bedel Subject: [PATCH] [media] v4l2-async: Always unregister the subdev on failure Date: Wed, 11 May 2016 17:40:01 +0200 Message-Id: <1462981201-14768-1-git-send-email-alban.bedel@avionic-design.de> X-Mailer: git-send-email 2.8.2 X-Provags-ID: V03:K0:oqzSASbiVzLP4a+m46Xf9vwIC3lGti5NJj4eH8MEH4u+2hUEekp LvI9CCZyuawCjv9k4Z7o/Zx3BYzf2MRFQk6/GeNkfnF43ixjPd18OMzKTDpaxksXrg6qVzS ugUP0MpyBkKmYFisQj54/zziRd0ymduHJhNTHAG6v0OpBYuQVymjVcqsA09UJJ7sqQW/mVd oC+4d6crqBSdoHlG+a/Xg== X-UI-Out-Filterresults: notjunk:1;V01:K0:vB0r7krGjoM=:5Ei5EGxj+60uQDn0cibY83 qDRmBtw+/WGmxrbAHvOhZDSylbYFBPD2SJY8RfKucfHpmD3gOkv6gGs06IAjk2GfBf1A/ZslB W5aQSrhYedIdlB9gs9Zk80PeoMMnkaVLD9bJ/2zqPDyFsMdzETXYBQ//R5zUW1Hqt4GzfNQPg kde+2toXc/midW+aPpjbx9fDQs4CW+U29bC1QXGVPFMQkGEHmvknd+ALZ8f4S40X+N+gYB/af 2pWJ3ON9FckwOBZS1AxEV8Z/Lqat7dKl4RrtlzFE0VVrdAxxCCJOwk8Hl/FkSVeVmuULXx9O1 0RFGr61kLErpB2e+gBzyTY8uGScof3aHC/5mk1N22RY3nm/ony/d5bo6ANhChmHmqbEpAeguM fQblcoADNYnB8ipFW0gL2UMHPRNMEbrw56HsP2Y4kggBkwV+FnGBmqPO4cq5mqDZxJrKvuk5S YB5cJcfRB2OmWLRCxpYUeScZlGRs31ARbNKjD+No7tDm3nq9+2nipxhiVrMIuWrjHYrpPUYLm LOjvSqTdDqr2zpwXhMUB8mKJuvU5XEogJ93uj6bub/uUX3lwRWRfzZLgvSm+snjMTQVTAaD2v KhrR/ayV6JS9vnG37/mJXNpFt+rT5wz9gVGIfhHlwK4wAR55Dm4cRpccLyOwLSsX1vSKSWJG0 iX7AVFy9ZoXXcBUYl0q8Xg9bQBq8OjccltFSbG1ojRSGW5wtxWTSMTOEqeG583A+hr5M= Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In v4l2_async_test_notify() if the registered_async callback or the complete notifier returns an error the subdev is not unregistered. This leave paths where v4l2_async_register_subdev() can fail but leave the subdev still registered. Add the required calls to v4l2_device_unregister_subdev() to plug these holes. Signed-off-by: Alban Bedel --- drivers/media/v4l2-core/v4l2-async.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/media/v4l2-core/v4l2-async.c b/drivers/media/v4l2-core/v4l2-async.c index ceb28d4..43393f8 100644 --- a/drivers/media/v4l2-core/v4l2-async.c +++ b/drivers/media/v4l2-core/v4l2-async.c @@ -121,13 +121,19 @@ static int v4l2_async_test_notify(struct v4l2_async_notifier *notifier, ret = v4l2_subdev_call(sd, core, registered_async); if (ret < 0 && ret != -ENOIOCTLCMD) { + v4l2_device_unregister_subdev(sd); if (notifier->unbind) notifier->unbind(notifier, sd, asd); return ret; } - if (list_empty(¬ifier->waiting) && notifier->complete) - return notifier->complete(notifier); + if (list_empty(¬ifier->waiting) && notifier->complete) { + ret = notifier->complete(notifier); + if (ret < 0) { + v4l2_device_unregister_subdev(sd); + return ret; + } + } return 0; } -- 2.8.2