]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
drm/amd/display: Handle dml allocation failure to avoid crash
authorRyan Seto <ryanseto@amd.com>
Fri, 1 Nov 2024 14:19:56 +0000 (10:19 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 11 Nov 2024 19:05:22 +0000 (14:05 -0500)
[Why]
In the case where a dml allocation fails for any reason, the
current state's dml contexts would no longer be valid. Then
subsequent calls dc_state_copy_internal would shallow copy
invalid memory and if the new state was released, a double
free would occur.

[How]
Reset dml pointers in new_state to NULL and avoid invalid
pointer

Reviewed-by: Dillon Varone <dillon.varone@amd.com>
Signed-off-by: Ryan Seto <ryanseto@amd.com>
Signed-off-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit bcafdc61529a48f6f06355d78eb41b3aeda5296c)
Cc: stable@vger.kernel.org
drivers/gpu/drm/amd/display/dc/core/dc_state.c

index 2597e3fd562bbe5556df09764dd3fd4a97ab68b8..e006f816ff2f743d754a3aa775a8b2660bb6c1d5 100644 (file)
@@ -265,6 +265,9 @@ struct dc_state *dc_state_create_copy(struct dc_state *src_state)
        dc_state_copy_internal(new_state, src_state);
 
 #ifdef CONFIG_DRM_AMD_DC_FP
+       new_state->bw_ctx.dml2 = NULL;
+       new_state->bw_ctx.dml2_dc_power_source = NULL;
+
        if (src_state->bw_ctx.dml2 &&
                        !dml2_create_copy(&new_state->bw_ctx.dml2, src_state->bw_ctx.dml2)) {
                dc_state_release(new_state);