Zhen Lei
2021-May-11 08:28 UTC
[Nouveau] [PATCH v2 0/2] Fix ida leak and error return code
v1 --> v2: 1. Add Patch 1 to fix ida leak 2. Modifies nouveau_get_backlight_name() to propagate the actual error code Zhen Lei (2): drm/nouveau: Fix ida leak drm/nouveau: Fix error return code in nouveau_backlight_init() drivers/gpu/drm/nouveau/nouveau_backlight.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) -- 2.26.0.106.g9fadedd
When the 'nb' value allocated from 'bl_ida' is greater than or
equal to
100, it will not be released. In fact, we can simplify operations by
limiting the range of idas that can be applied for.
By the way, delete the const modifier of the local variable 'nb'.
Fixes: db1a0ae21461 ("drm/nouveau/bl: Assign different names to
interfaces")
Signed-off-by: Zhen Lei <thunder.leizhen at huawei.com>
---
drivers/gpu/drm/nouveau/nouveau_backlight.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nouveau_backlight.c
b/drivers/gpu/drm/nouveau/nouveau_backlight.c
index 72f35a2babcb20e..d1c998e645fb4b6 100644
--- a/drivers/gpu/drm/nouveau/nouveau_backlight.c
+++ b/drivers/gpu/drm/nouveau/nouveau_backlight.c
@@ -51,8 +51,9 @@ static bool
nouveau_get_backlight_name(char backlight_name[BL_NAME_SIZE],
struct nouveau_backlight *bl)
{
- const int nb = ida_simple_get(&bl_ida, 0, 0, GFP_KERNEL);
- if (nb < 0 || nb >= 100)
+ int nb = ida_simple_get(&bl_ida, 0, 100, GFP_KERNEL);
+
+ if (nb < 0)
return false;
if (nb > 0)
snprintf(backlight_name, BL_NAME_SIZE, "nv_backlight%d", nb);
--
2.26.0.106.g9fadedd
Zhen Lei
2021-May-11 08:28 UTC
[Nouveau] [PATCH v2 2/2] drm/nouveau: Fix error return code in nouveau_backlight_init()
Fix to return a negative error code from the error handling case instead
of 0, as done elsewhere in this function.
Fixes: db1a0ae21461 ("drm/nouveau/bl: Assign different names to
interfaces")
Suggested-by: Pierre Moreau <pierre.morrow at free.fr>
Signed-off-by: Zhen Lei <thunder.leizhen at huawei.com>
---
drivers/gpu/drm/nouveau/nouveau_backlight.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nouveau_backlight.c
b/drivers/gpu/drm/nouveau/nouveau_backlight.c
index d1c998e645fb4b6..f0856adbe775624 100644
--- a/drivers/gpu/drm/nouveau/nouveau_backlight.c
+++ b/drivers/gpu/drm/nouveau/nouveau_backlight.c
@@ -47,20 +47,20 @@ struct nouveau_backlight {
int id;
};
-static bool
+static int
nouveau_get_backlight_name(char backlight_name[BL_NAME_SIZE],
struct nouveau_backlight *bl)
{
int nb = ida_simple_get(&bl_ida, 0, 100, GFP_KERNEL);
if (nb < 0)
- return false;
+ return nb;
if (nb > 0)
snprintf(backlight_name, BL_NAME_SIZE, "nv_backlight%d", nb);
else
snprintf(backlight_name, BL_NAME_SIZE, "nv_backlight");
bl->id = nb;
- return true;
+ return 0;
}
static int
@@ -273,7 +273,8 @@ nouveau_backlight_init(struct drm_connector *connector)
if (!bl)
return -ENOMEM;
- if (!nouveau_get_backlight_name(backlight_name, bl)) {
+ ret = nouveau_get_backlight_name(backlight_name, bl);
+ if (ret) {
NV_ERROR(drm, "Failed to retrieve a unique name for the backlight
interface\n");
goto fail_alloc;
}
--
2.26.0.106.g9fadedd