aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2014-07-14 17:57:19 -0400
committerAlex Deucher <alexander.deucher@amd.com>2014-07-17 09:01:29 -0400
commit0ac66effe7fcdee55bda6d5d10d3372c95a41920 (patch)
tree50e441e2b2684ee59b299003c0f61dd187180ef8
parentbf38b025d3f58f4c1273714ff1be5bfbf99574a4 (diff)
drm/radeon: avoid leaking edid data
In some cases we fetch the edid in the detect() callback in order to determine what sort of monitor is connected. If that happens, don't fetch the edid again in the get_modes() callback or we will leak the edid. Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Cc: stable@vger.kernel.org
-rw-r--r--drivers/gpu/drm/radeon/radeon_display.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
index 13896edcf0b6..65501af453be 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -830,6 +830,10 @@ int radeon_ddc_get_modes(struct radeon_connector *radeon_connector)
830 struct radeon_device *rdev = dev->dev_private; 830 struct radeon_device *rdev = dev->dev_private;
831 int ret = 0; 831 int ret = 0;
832 832
833 /* don't leak the edid if we already fetched it in detect() */
834 if (radeon_connector->edid)
835 goto got_edid;
836
833 /* on hw with routers, select right port */ 837 /* on hw with routers, select right port */
834 if (radeon_connector->router.ddc_valid) 838 if (radeon_connector->router.ddc_valid)
835 radeon_router_select_ddc_port(radeon_connector); 839 radeon_router_select_ddc_port(radeon_connector);
@@ -868,6 +872,7 @@ int radeon_ddc_get_modes(struct radeon_connector *radeon_connector)
868 radeon_connector->edid = radeon_bios_get_hardcoded_edid(rdev); 872 radeon_connector->edid = radeon_bios_get_hardcoded_edid(rdev);
869 } 873 }
870 if (radeon_connector->edid) { 874 if (radeon_connector->edid) {
875got_edid:
871 drm_mode_connector_update_edid_property(&radeon_connector->base, radeon_connector->edid); 876 drm_mode_connector_update_edid_property(&radeon_connector->base, radeon_connector->edid);
872 ret = drm_add_edid_modes(&radeon_connector->base, radeon_connector->edid); 877 ret = drm_add_edid_modes(&radeon_connector->base, radeon_connector->edid);
873 drm_edid_to_eld(&radeon_connector->base, radeon_connector->edid); 878 drm_edid_to_eld(&radeon_connector->base, radeon_connector->edid);