From: Joshua Aberback Date: Thu, 23 Oct 2025 20:43:56 +0000 (-0400) Subject: drm/amd/display: Persist stream refcount through restore X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b0ba3108e3f8b20d8631ca4475a1a6d171973651;p=thirdparty%2Fkernel%2Flinux.git drm/amd/display: Persist stream refcount through restore [Why & How] Overwriting the refcount on stream restore can lead to double-free errors or memory leaks if an unbalanced number of retains and releases occurs between a backup and restore. Reviewed-by: Dillon Varone Signed-off-by: Joshua Aberback Signed-off-by: Ray Wu Tested-by: Daniel Wheeler Signed-off-by: Alex Deucher --- diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c index b720e007c6540..f519e5893a68a 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c @@ -3389,7 +3389,11 @@ static void restore_planes_and_stream_state( for (i = 0; i < status->plane_count; i++) { dc_plane_copy_config(status->plane_states[i], &scratch->plane_states[i]); } + + // refcount is persistent + struct kref temp_refcount = stream->refcount; *stream = scratch->stream_state; + stream->refcount = temp_refcount; } /**