> -----Original Message-----
> From: Borah, Chaitanya Kumar <[email protected]>
> Sent: Friday, December 19, 2025 12:26 PM
> To: [email protected]; [email protected]; intel-
> [email protected]; [email protected]
> Cc: [email protected]; [email protected];
> [email protected]; [email protected]; [email protected];
> [email protected]; [email protected]; Shankar, Uma
> <[email protected]>; Kandpal, Suraj <[email protected]>;
> [email protected]; [email protected]; Roper, Matthew D
> <[email protected]>
> Subject: [PATCH 04/13] drm/i915/display: Fix color pipeline enum name leak
> 
> intel_color_pipeline_plane_init() 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.

Looks Good to me.
Reviewed-by: Uma Shankar <[email protected]>

> Fixes: ef105316819d ("drm/i915/color: Create a transfer function color 
> pipeline")
> Signed-off-by: Chaitanya Kumar Borah <[email protected]>
> ---
>  .../drm/i915/display/intel_color_pipeline.c    | 18 +++++++++++++-----
>  1 file changed, 13 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_color_pipeline.c
> b/drivers/gpu/drm/i915/display/intel_color_pipeline.c
> index 684641c8323b..04af552b3648 100644
> --- a/drivers/gpu/drm/i915/display/intel_color_pipeline.c
> +++ b/drivers/gpu/drm/i915/display/intel_color_pipeline.c
> @@ -34,7 +34,6 @@ int _intel_color_pipeline_plane_init(struct drm_plane 
> *plane,
> struct drm_prop_en
>               return ret;
> 
>       list->type = colorop->base.base.id;
> -     list->name = kasprintf(GFP_KERNEL, "Color Pipeline %d", colorop-
> >base.base.id);
> 
>       /* TODO: handle failures and clean up */
>       prev_op = &colorop->base;
> @@ -74,6 +73,8 @@ int _intel_color_pipeline_plane_init(struct drm_plane 
> *plane,
> struct drm_prop_en
> 
>       drm_colorop_set_next_property(prev_op, &colorop->base);
> 
> +     list->name = kasprintf(GFP_KERNEL, "Color Pipeline %d", list->type);
> +
>       return 0;
>  }
> 
> @@ -81,9 +82,10 @@ int intel_color_pipeline_plane_init(struct drm_plane 
> *plane,
> enum pipe pipe)  {
>       struct drm_device *dev = plane->dev;
>       struct intel_display *display = to_intel_display(dev);
> -     struct drm_prop_enum_list pipelines[MAX_COLOR_PIPELINES];
> +     struct drm_prop_enum_list pipelines[MAX_COLOR_PIPELINES] = {};
>       int len = 0;
> -     int ret;
> +     int ret = 0;
> +     int i;
> 
>       /* Currently expose pipeline only for HDR planes */
>       if (!icl_is_hdr_plane(display, to_intel_plane(plane)->id)) @@ -92,8 
> +94,14
> @@ int intel_color_pipeline_plane_init(struct drm_plane *plane, enum pipe 
> pipe)
>       /* Add pipeline consisting of transfer functions */
>       ret = _intel_color_pipeline_plane_init(plane, &pipelines[len], pipe);
>       if (ret)
> -             return ret;
> +             goto out;
>       len++;
> 
> -     return drm_plane_create_color_pipeline_property(plane, pipelines, len);
> +     ret = drm_plane_create_color_pipeline_property(plane, pipelines, len);
> +
> +     for (i = 0; i < len; i++)
> +             kfree(pipelines[i].name);
> +
> +out:
> +     return ret;
>  }
> --
> 2.25.1

Reply via email to