drm/amd/display: Validate plane rects before use
authorAric Cyr <aric.cyr@amd.com>
Tue, 28 Sep 2021 20:05:27 +0000 (16:05 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 19 Oct 2021 21:18:22 +0000 (17:18 -0400)
[Why]
Calculation of scaling ratio can result in a crash due to zero'd src or
dst plane rects.

[How]
Validate that src and dst rects are valid before using for scaling
calculations.

Reviewed-by: Josip Pavic <Josip.Pavic@amd.com>
Acked-by: Agustin Gutierrez Sanchez <agustin.gutierrez@amd.com>
Signed-off-by: Aric Cyr <aric.cyr@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/core/dc_resource.c

index 561c10a92bb53cf5c38d6467d92f84987696c010..9e83fd54e2ca4be661ee3b5bc51f7e3c1dd2cb64 100644 (file)
@@ -3009,6 +3009,11 @@ enum dc_status dc_validate_plane(struct dc *dc, const struct dc_plane_state *pla
 {
        enum dc_status res = DC_OK;
 
+       /* check if surface has invalid dimensions */
+       if (plane_state->src_rect.width == 0 || plane_state->src_rect.height == 0 ||
+               plane_state->dst_rect.width == 0 || plane_state->dst_rect.height == 0)
+               return DC_FAIL_SURFACE_VALIDATE;
+
        /* TODO For now validates pixel format only */
        if (dc->res_pool->funcs->validate_plane)
                return dc->res_pool->funcs->validate_plane(plane_state, &dc->caps);