]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
reset: bail if try_module_get() fails
authorPhilipp Zabel <p.zabel@pengutronix.de>
Mon, 7 Jun 2021 08:26:15 +0000 (10:26 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 20 Jul 2021 14:16:14 +0000 (16:16 +0200)
[ Upstream commit 4fb26fb83f0def3d39c14e268bcd4003aae8fade ]

Abort instead of returning a new reset control for a reset controller
device that is going to have its module unloaded.

Reported-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Fixes: 61fc41317666 ("reset: Add reset controller API")
Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Link: https://lore.kernel.org/r/20210607082615.15160-1-p.zabel@pengutronix.de
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/reset/core.c

index f7bf20493f23e9d5eedb9c3c6361a8f890272254..ccb97f4e31c38661db70e88287f6f97bf35e047e 100644 (file)
@@ -428,7 +428,10 @@ static struct reset_control *__reset_control_get_internal(
        if (!rstc)
                return ERR_PTR(-ENOMEM);
 
-       try_module_get(rcdev->owner);
+       if (!try_module_get(rcdev->owner)) {
+               kfree(rstc);
+               return ERR_PTR(-ENODEV);
+       }
 
        rstc->rcdev = rcdev;
        list_add(&rstc->list, &rcdev->reset_control_head);