The nvmem->dev device is still registered even if nvmem_register_cdev()
fails and the 'nvmem' memory was freed. Fix this by unregister the
device first before freeing the memory.

Signed-off-by: Marco Felsch <m.fel...@pengutronix.de>
---
 drivers/nvmem/core.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
index 
7acd26474b503a6a6f8c6297c7c36a3a1990105a..562d25ef1fd6cc06c8308cc342d1d1f83edc1585
 100644
--- a/drivers/nvmem/core.c
+++ b/drivers/nvmem/core.c
@@ -228,15 +228,19 @@ struct nvmem_device *nvmem_register(const struct 
nvmem_config *config)
 
        if (!config->cdev) {
                rval = nvmem_register_cdev(nvmem, config->name);
-               if (rval) {
-                       kfree(nvmem);
-                       return ERR_PTR(rval);
-               }
+               if (rval)
+                       goto err_unregister;
        }
 
        list_add_tail(&nvmem->node, &nvmem_devs);
 
        return nvmem;
+
+err_unregister:
+       unregister_device(&nvmem->dev);
+       kfree(nvmem);
+
+       return ERR_PTR(rval);
 }
 EXPORT_SYMBOL_GPL(nvmem_register);
 

-- 
2.39.5


Reply via email to