On Fri Oct 9, 2026 at 11:35 PM CEST, lyude wrote:
> Reviewed-by: Lyude Paul <[email protected]>
>
> Will push to drm-misc-fixes in a moment

Please wait, those are two unrelated fixes with two different Fixes: tags, so
those should be two separate patches.

I'm also not sure this is -fixes material. A memory leak in an unwind path for
-rc7 feels wrong.

Thanks,
Danilo

> On Fri, 2026-10-09 at 19:51 +0800, liupeng wrote:
>> In nouveau_debugfs_init(), if nvif_object_ctor() fails, the
>> previously
>> allocated drm->debugfs is leaked because the function returns the
>> error code directly.
>> 
>> In nouveau_hwmon_init(), if hwmon_device_register_with_info() fails,
>> the allocated hwmon structure is leaked because the function returns
>> the error code directly.
>> 
>> Fix both by freeing the allocated memory and clearing the pointer on
>> the error paths.
>> 
>> Fixes: b126a200e9db ("drm/nouveau/debugfs: we need a ctrl object for
>> debugfs")
>> Fixes: b9ed919f1c8f ("drm/nouveau/drm/pm: remove everything except
>> the hwmon interfaces to THERM")
>> Cc: [email protected]
>> Reviewed-by: Lyude Paul <[email protected]>
>> Signed-off-by: liupeng <[email protected]>
>> ---
>> Changes in v3:
>> - Drop the extra return in nouveau_debugfs_init() as suggested by
>> Lyude.
>> - Add Reviewed-by tag.
>> 
>>  drivers/gpu/drm/nouveau/nouveau_debugfs.c | 14 +++++++++++---
>>  drivers/gpu/drm/nouveau/nouveau_hwmon.c   |  2 ++
>>  2 files changed, 13 insertions(+), 3 deletions(-)
>> 
>> diff --git a/drivers/gpu/drm/nouveau/nouveau_debugfs.c
>> b/drivers/gpu/drm/nouveau/nouveau_debugfs.c
>> index 47d5579c568d..338421e52f69 100644
>> --- a/drivers/gpu/drm/nouveau/nouveau_debugfs.c
>> +++ b/drivers/gpu/drm/nouveau/nouveau_debugfs.c
>> @@ -295,13 +295,21 @@ nouveau_drm_debugfs_init(struct drm_minor
>> *minor)
>>  int
>>  nouveau_debugfs_init(struct nouveau_drm *drm)
>>  {
>> +    int ret;
>> +
>>      drm->debugfs = kzalloc_obj(*drm->debugfs);
>>      if (!drm->debugfs)
>>              return -ENOMEM;
>>  
>> -    return nvif_object_ctor(&drm->client.device.object,
>> "debugfsCtrl", 0,
>> -                            NVIF_CLASS_CONTROL, NULL, 0,
>> -                            &drm->debugfs->ctrl);
>> +    ret = nvif_object_ctor(&drm->client.device.object,
>> "debugfsCtrl", 0,
>> +                           NVIF_CLASS_CONTROL, NULL, 0,
>> +                           &drm->debugfs->ctrl);
>> +    if (ret) {
>> +            kfree(drm->debugfs);
>> +            drm->debugfs = NULL;
>> +    }
>> +
>> +    return ret;
>>  }
>>  
>>  void
>> diff --git a/drivers/gpu/drm/nouveau/nouveau_hwmon.c
>> b/drivers/gpu/drm/nouveau/nouveau_hwmon.c
>> index 726397ab035d..ffbe7f542ab0 100644
>> --- a/drivers/gpu/drm/nouveau/nouveau_hwmon.c
>> +++ b/drivers/gpu/drm/nouveau/nouveau_hwmon.c
>> @@ -697,6 +697,8 @@ nouveau_hwmon_init(struct drm_device *dev)
>>      if (IS_ERR(hwmon_dev)) {
>>              ret = PTR_ERR(hwmon_dev);
>>              NV_ERROR(drm, "Unable to register hwmon device:
>> %d\n", ret);
>> +            drm->hwmon = NULL;
>> +            kfree(hwmon);
>>              return ret;
>>      }
>>  

Reply via email to