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