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;
>> }
>>