[PATCH v2 04/15] nvmem: core: fix nvmem_register error path

Marco Felsch m.felsch at pengutronix.de
Mon Aug 18 10:44:38 PDT 2025


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.felsch at 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 68cb27093227d41caddc85696eb2a22f0d07d698..dd332921e4c3d9192ff8e311ebfc4fba1134719c 100644
--- a/drivers/nvmem/core.c
+++ b/drivers/nvmem/core.c
@@ -260,15 +260,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




More information about the barebox mailing list