Re: [PATCH 2/2] drm/amd/display: validate plane degamma LUT size for private color prop

Melissa Wen <[email protected]>
Newsgroups org.freedesktop.lists.amd-gfx,org.kernel.vger.stable
Message-ID <[email protected]>

On 04/08/2026 23:04, Harry Wentland wrote:
> Unlike the CRTC degamma path, which is guarded by
> amdgpu_dm_verify_lut_sizes(), the per-plane degamma LUT size was never
> validated before use. __set_dm_plane_degamma() passed the user-supplied
> size straight into __is_lut_linear() and, for a non-linear LUT, into
> __set_input_tf() -> __drm_lut_to_dc_gamma(), the latter always iterating
> MAX_COLOR_LUT_ENTRIES entries regardless of the actual LUT size.
>
> A malformed AMD_PLANE_DEGAMMA_LUT blob (e.g. a single entry) could thus
> trigger a divide-by-zero in __is_lut_linear() or an out-of-bounds read in
> __drm_lut_to_dc_gamma(). Reject any plane degamma LUT whose size does not
> match MAX_COLOR_LUT_ENTRIES, mirroring the invariant the code already
> asserts a few lines below (and which the CRTC path enforces).
>
> The AMD_PLANE_DEGAMMA_LUT property is only exposed on builds with
> AMD_PRIVATE_COLOR defined.
>
> Fixes: 980f8710075a ("drm/amd/display: add plane degamma TF and LUT support")
> Cc: [email protected]
> Signed-off-by: Harry Wentland <[email protected]>
> ---
>   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c | 7 +++++++
>   1 file changed, 7 insertions(+)
>
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
> index 26e5c89375a5..d55dc06167a8 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
> @@ -1495,6 +1495,13 @@ __set_dm_plane_degamma(struct drm_plane_state *plane_state,
>   	degamma_lut = __extract_blob_lut(dm_plane_state->degamma_lut,
>   					 &degamma_size);
>   
> +	if (degamma_lut && degamma_size != MAX_COLOR_LUT_ENTRIES) {
> +		drm_dbg(plane_state->state->dev,
> +			"Invalid Plane Degamma LUT size. Should be %u but got %u.\n",
> +			MAX_COLOR_LUT_ENTRIES, degamma_size);
> +		return -EINVAL;
> +	}
> +

LGTM

Thanks!

Reviewed-by: Melissa Wen <[email protected]>

>   	has_degamma_lut = degamma_lut &&
>   			  !__is_lut_linear(degamma_lut, degamma_size);
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.