Messages in this thread Patch in this message | | | Date | Tue, 25 Jan 2022 18:15:22 +0800 | Subject | [PATCH 1/6] platform/chrome: cros_ec: fix error handling in cros_ec_register() | From | Tzung-Bi Shih <> |
| |
Fixes cros_ec_register() doesn't unregister platform devices if blocking_notifier_chain_register() fails.
Also uses the single exit path to handle the platform device unregistration.
This fix depends on the fact that all the callers of cros_ec_register() allocate zeroed memory.
Fixes: 42cd0ab476e2 ("platform/chrome: cros_ec: Query EC protocol version if EC transitions between RO/RW") Signed-off-by: Tzung-Bi Shih <tzungbi@google.com> --- drivers/platform/chrome/cros_ec.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/drivers/platform/chrome/cros_ec.c b/drivers/platform/chrome/cros_ec.c index fc5aa1525d13..3aec890edd39 100644 --- a/drivers/platform/chrome/cros_ec.c +++ b/drivers/platform/chrome/cros_ec.c @@ -245,18 +245,16 @@ int cros_ec_register(struct cros_ec_device *ec_dev) if (IS_ERR(ec_dev->pd)) { dev_err(ec_dev->dev, "Failed to create CrOS PD platform device\n"); - platform_device_unregister(ec_dev->ec); - return PTR_ERR(ec_dev->pd); + err = PTR_ERR(ec_dev->pd); + goto exit; } } if (IS_ENABLED(CONFIG_OF) && dev->of_node) { err = devm_of_platform_populate(dev); if (err) { - platform_device_unregister(ec_dev->pd); - platform_device_unregister(ec_dev->ec); dev_err(dev, "Failed to register sub-devices\n"); - return err; + goto exit; } } @@ -278,7 +276,7 @@ int cros_ec_register(struct cros_ec_device *ec_dev) err = blocking_notifier_chain_register(&ec_dev->event_notifier, &ec_dev->notifier_ready); if (err) - return err; + goto exit; } dev_info(dev, "Chrome EC device registered\n"); @@ -291,6 +289,12 @@ int cros_ec_register(struct cros_ec_device *ec_dev) cros_ec_irq_thread(0, ec_dev); return 0; +exit: + if (ec_dev->pd && !IS_ERR(ec_dev->pd)) + platform_device_unregister(ec_dev->pd); + if (ec_dev->ec && !IS_ERR(ec_dev->ec)) + platform_device_unregister(ec_dev->ec); + return err; } EXPORT_SYMBOL(cros_ec_register); -- 2.35.0.rc0.227.g00780c9af4-goog
| |