]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/vkms: Fix color pipeline enum name leak
authorChaitanya Kumar Borah <chaitanya.kumar.borah@intel.com>
Tue, 13 Jan 2026 10:22:53 +0000 (15:52 +0530)
committerMaarten Lankhorst <dev@lankhorst.se>
Thu, 22 Jan 2026 09:26:35 +0000 (10:26 +0100)
vkms_initialize_colorops() allocates enum names for color pipelines,
which are copied by drm_property_create_enum(). The temporary strings
were not freed, resulting in a memory leak.

Allocate enum names only after successful pipeline construction and
free them on all exit paths

Fixes: c1e578bd08da ("drm/vkms: Add enumerated 1D curve colorop")
Signed-off-by: Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com>
Reviewed-by: Uma Shankar <uma.shankar@intel.com>
Reviewed-by: Alex Hung <alex.hung@amd.com>
Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se>
Link: https://patch.msgid.link/20260113102303.724205-4-chaitanya.kumar.borah@intel.com
drivers/gpu/drm/vkms/vkms_colorop.c

index 5c3ffc78aea06fffab56a199fcec30dd9748a0bf..d03a1f2e9c41553df553da3e51c3bfeeda45db23 100644 (file)
@@ -37,7 +37,6 @@ static int vkms_initialize_color_pipeline(struct drm_plane *plane, struct drm_pr
                goto cleanup;
 
        list->type = ops[i]->base.id;
-       list->name = kasprintf(GFP_KERNEL, "Color Pipeline %d", ops[i]->base.id);
 
        i++;
 
@@ -88,6 +87,8 @@ static int vkms_initialize_color_pipeline(struct drm_plane *plane, struct drm_pr
 
        drm_colorop_set_next_property(ops[i - 1], ops[i]);
 
+       list->name = kasprintf(GFP_KERNEL, "Color Pipeline %d", ops[0]->base.id);
+
        return 0;
 
 cleanup:
@@ -103,18 +104,18 @@ cleanup:
 
 int vkms_initialize_colorops(struct drm_plane *plane)
 {
-       struct drm_prop_enum_list pipeline;
-       int ret;
+       struct drm_prop_enum_list pipeline = {};
+       int ret = 0;
 
        /* Add color pipeline */
        ret = vkms_initialize_color_pipeline(plane, &pipeline);
        if (ret)
-               return ret;
+               goto out;
 
        /* Create COLOR_PIPELINE property and attach */
        ret = drm_plane_create_color_pipeline_property(plane, &pipeline, 1);
-       if (ret)
-               return ret;
 
-       return 0;
+       kfree(pipeline.name);
+out:
+       return ret;
 }