From: Alex Hung <[email protected]>

[WHAT]
When a sink is connected, aconnector->drm_edid was overwritten without
freeing the previous allocation, causing a memory leak on resume.

[HOW]
Free the previous drm_edid before updating it.

Reviewed-by: Roman Li <[email protected]>
Signed-off-by: Alex Hung <[email protected]>
Signed-off-by: Chuanyu Tseng <[email protected]>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index acdc4abbdddc..344ff8cb42df 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -3992,8 +3992,9 @@ void amdgpu_dm_update_connector_after_detect(
 
                aconnector->dc_sink = sink;
                dc_sink_retain(aconnector->dc_sink);
+               drm_edid_free(aconnector->drm_edid);
+               aconnector->drm_edid = NULL;
                if (sink->dc_edid.length == 0) {
-                       aconnector->drm_edid = NULL;
                        hdmi_cec_unset_edid(aconnector);
                        if (aconnector->dc_link->aux_mode) {
                                
drm_dp_cec_unset_edid(&aconnector->dm_dp_aux.aux);
-- 
2.43.0

Reply via email to