]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
RDMA/mlx5: Fix memory leak in GET_DATA_DIRECT_SYSFS_PATH handler
authorZilin Guan <zilin@seu.edu.cn>
Mon, 26 Jan 2026 07:48:01 +0000 (07:48 +0000)
committerLeon Romanovsky <leonro@nvidia.com>
Tue, 27 Jan 2026 12:04:18 +0000 (07:04 -0500)
The UVERBS_HANDLER(MLX5_IB_METHOD_GET_DATA_DIRECT_SYSFS_PATH) function
allocates memory for the device path using kobject_get_path(). If the
length of the device path exceeds the output buffer length, the function
returns -ENOSPC but does not free the allocated memory, resulting in a
memory leak.

Add a kfree() call to the error path to ensure the allocated memory is
properly freed.

Compile tested only. Issue found using a prototype static analysis tool
and code review.

Fixes: ec7ad6530909 ("RDMA/mlx5: Introduce GET_DATA_DIRECT_SYSFS_PATH ioctl")
Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
Link: https://patch.msgid.link/20260126074801.627898-1-zilin@seu.edu.cn
Signed-off-by: Leon Romanovsky <leon@kernel.org>
drivers/infiniband/hw/mlx5/std_types.c

index 2fcf553044e15eed6897cd9320f532ea5a0ef91b..1ee31611b4b3f1cd335c6951fe0fb055d84bdaaa 100644 (file)
@@ -195,7 +195,7 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_GET_DATA_DIRECT_SYSFS_PATH)(
        int out_len = uverbs_attr_get_len(attrs,
                        MLX5_IB_ATTR_GET_DATA_DIRECT_SYSFS_PATH);
        u32 dev_path_len;
-       char *dev_path;
+       char *dev_path = NULL;
        int ret;
 
        c = to_mucontext(ib_uverbs_get_ucontext(attrs));
@@ -223,9 +223,9 @@ static int UVERBS_HANDLER(MLX5_IB_METHOD_GET_DATA_DIRECT_SYSFS_PATH)(
 
        ret = uverbs_copy_to(attrs, MLX5_IB_ATTR_GET_DATA_DIRECT_SYSFS_PATH, dev_path,
                             dev_path_len);
-       kfree(dev_path);
 
 end:
+       kfree(dev_path);
        mutex_unlock(&dev->data_direct_lock);
        return ret;
 }