| From: Alex Deucher <alexander.deucher@amd.com> |
| Date: Mon, 14 Jul 2014 17:57:19 -0400 |
| Subject: drm/radeon: avoid leaking edid data |
| |
| commit 0ac66effe7fcdee55bda6d5d10d3372c95a41920 upstream. |
| |
| 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> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/gpu/drm/radeon/radeon_display.c | 5 +++++ |
| 1 file changed, 5 insertions(+) |
| |
| --- a/drivers/gpu/drm/radeon/radeon_display.c |
| +++ b/drivers/gpu/drm/radeon/radeon_display.c |
| @@ -697,6 +697,10 @@ int radeon_ddc_get_modes(struct radeon_c |
| struct radeon_device *rdev = dev->dev_private; |
| int ret = 0; |
| |
| + /* don't leak the edid if we already fetched it in detect() */ |
| + if (radeon_connector->edid) |
| + goto got_edid; |
| + |
| /* on hw with routers, select right port */ |
| if (radeon_connector->router.ddc_valid) |
| radeon_router_select_ddc_port(radeon_connector); |
| @@ -736,6 +740,7 @@ int radeon_ddc_get_modes(struct radeon_c |
| radeon_connector->edid = radeon_bios_get_hardcoded_edid(rdev); |
| } |
| if (radeon_connector->edid) { |
| +got_edid: |
| drm_mode_connector_update_edid_property(&radeon_connector->base, radeon_connector->edid); |
| ret = drm_add_edid_modes(&radeon_connector->base, radeon_connector->edid); |
| drm_edid_to_eld(&radeon_connector->base, radeon_connector->edid); |