48 lines
1.6 KiB
Diff
48 lines
1.6 KiB
Diff
From 5544e90c81261e82e02bbf7c6015a4b9c8c825ef Mon Sep 17 00:00:00 2001
|
|
From: Gaosheng Cui <cuigaosheng1@huawei.com>
|
|
Date: Fri, 16 Sep 2022 13:20:50 +0100
|
|
Subject: [PATCH] nvmem: core: add error handling for dev_set_name
|
|
|
|
The type of return value of dev_set_name is int, which may return
|
|
wrong result, so we add error handling for it to reclaim memory
|
|
of nvmem resource, and return early when an error occurs.
|
|
|
|
Signed-off-by: Gaosheng Cui <cuigaosheng1@huawei.com>
|
|
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
|
|
Link: https://lore.kernel.org/r/20220916122100.170016-4-srinivas.kandagatla@linaro.org
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
---
|
|
drivers/nvmem/core.c | 12 +++++++++---
|
|
1 file changed, 9 insertions(+), 3 deletions(-)
|
|
|
|
--- a/drivers/nvmem/core.c
|
|
+++ b/drivers/nvmem/core.c
|
|
@@ -811,18 +811,24 @@ struct nvmem_device *nvmem_register(cons
|
|
|
|
switch (config->id) {
|
|
case NVMEM_DEVID_NONE:
|
|
- dev_set_name(&nvmem->dev, "%s", config->name);
|
|
+ rval = dev_set_name(&nvmem->dev, "%s", config->name);
|
|
break;
|
|
case NVMEM_DEVID_AUTO:
|
|
- dev_set_name(&nvmem->dev, "%s%d", config->name, nvmem->id);
|
|
+ rval = dev_set_name(&nvmem->dev, "%s%d", config->name, nvmem->id);
|
|
break;
|
|
default:
|
|
- dev_set_name(&nvmem->dev, "%s%d",
|
|
+ rval = dev_set_name(&nvmem->dev, "%s%d",
|
|
config->name ? : "nvmem",
|
|
config->name ? config->id : nvmem->id);
|
|
break;
|
|
}
|
|
|
|
+ if (rval) {
|
|
+ ida_free(&nvmem_ida, nvmem->id);
|
|
+ kfree(nvmem);
|
|
+ return ERR_PTR(rval);
|
|
+ }
|
|
+
|
|
nvmem->read_only = device_property_present(config->dev, "read-only") ||
|
|
config->read_only || !nvmem->reg_write;
|
|
|