Message ID | 20230326143224.572654-3-u.kleine-koenig@pengutronix.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [001/117] media: cros-ec-cec: Don't exit early in .remove() callback | expand |
Hello, On Sun, Mar 26, 2023 at 04:30:27PM +0200, Uwe Kleine-König wrote: > Exiting early in remove without releasing all acquired resources yields > leaks. Note that e.g. memory allocated with devm_zalloc() is freed after > .remove() returns, even if the return code was negative. > > While blocking_notifier_chain_unregister() won't fail and so the > change is somewhat cosmetic, platform driver's .remove callbacks are > about to be converted to return void. To prepare that, keep the error > message but don't return early. > > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> I fatfingered sending out this series and this patch is a duplicate, please ignore this patch, 002/117 with the otherwise same subject is the right one. (They only differ in the number, this patch is advertised as 002 in the cover letter.) Sorry, Uwe
diff --git a/drivers/media/cec/platform/cros-ec/cros-ec-cec.c b/drivers/media/cec/platform/cros-ec/cros-ec-cec.c index 6ebedc71d67d..960432230bbf 100644 --- a/drivers/media/cec/platform/cros-ec/cros-ec-cec.c +++ b/drivers/media/cec/platform/cros-ec/cros-ec-cec.c @@ -332,14 +332,16 @@ static int cros_ec_cec_remove(struct platform_device *pdev) struct device *dev = &pdev->dev; int ret; + /* + * blocking_notifier_chain_unregister() only fails if the notifier isn't + * in the list. We know it was added to it by .probe(), so there should + * be no need for error checking. Be cautious and still check. + */ ret = blocking_notifier_chain_unregister( &cros_ec_cec->cros_ec->event_notifier, &cros_ec_cec->notifier); - - if (ret) { + if (ret) dev_err(dev, "failed to unregister notifier\n"); - return ret; - } cec_notifier_cec_adap_unregister(cros_ec_cec->notify, cros_ec_cec->adap);
Exiting early in remove without releasing all acquired resources yields leaks. Note that e.g. memory allocated with devm_zalloc() is freed after .remove() returns, even if the return code was negative. While blocking_notifier_chain_unregister() won't fail and so the change is somewhat cosmetic, platform driver's .remove callbacks are about to be converted to return void. To prepare that, keep the error message but don't return early. Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> --- drivers/media/cec/platform/cros-ec/cros-ec-cec.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)