reset: bail if try_module_get() fails
authorPhilipp Zabel <p.zabel@pengutronix.de>
Mon, 7 Jun 2021 08:26:15 +0000 (10:26 +0200)
committerPhilipp Zabel <p.zabel@pengutronix.de>
Mon, 7 Jun 2021 09:26:31 +0000 (11:26 +0200)
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>
drivers/reset/core.c

index 6385207..61e6888 100644 (file)
@@ -774,7 +774,10 @@ __reset_control_get_internal(struct reset_controller_dev *rcdev,
        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);