drm: remove the raw_edid field from struct drm_display_info
Neither the drm core nor any of the drivers really need the raw_edid field of struct drm_display_info for anything. Instead of being useful, it creates confusion about who is responsible for freeing the memory it points to and setting the field to NULL afterwards, leading to memory leaks and dangling pointers. Remove the raw_edid field, and fix drivers as necessary. Reported-by: Russell King <linux@arm.linux.org.uk> Signed-off-by: Jani Nikula <jani.nikula@intel.com> Acked-by: Inki Dae <inki.dae@samsung.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
@@ -147,9 +147,7 @@ static int exynos_drm_connector_get_modes(struct drm_connector *connector)
|
||||
|
||||
drm_mode_connector_update_edid_property(connector, edid);
|
||||
count = drm_add_edid_modes(connector, edid);
|
||||
|
||||
kfree(connector->display_info.raw_edid);
|
||||
connector->display_info.raw_edid = edid;
|
||||
kfree(edid);
|
||||
} else {
|
||||
struct drm_display_mode *mode = drm_mode_create(connector->dev);
|
||||
struct exynos_drm_panel_info *panel;
|
||||
|
@@ -102,7 +102,6 @@ static int vidi_get_edid(struct device *dev, struct drm_connector *connector,
|
||||
u8 *edid, int len)
|
||||
{
|
||||
struct vidi_context *ctx = get_vidi_context(dev);
|
||||
struct edid *raw_edid;
|
||||
|
||||
DRM_DEBUG_KMS("%s\n", __FILE__);
|
||||
|
||||
@@ -115,18 +114,6 @@ static int vidi_get_edid(struct device *dev, struct drm_connector *connector,
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
raw_edid = kzalloc(len, GFP_KERNEL);
|
||||
if (!raw_edid) {
|
||||
DRM_DEBUG_KMS("failed to allocate raw_edid.\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
memcpy(raw_edid, ctx->raw_edid, min((1 + ctx->raw_edid->extensions)
|
||||
* EDID_LENGTH, len));
|
||||
|
||||
/* attach the edid data to connector. */
|
||||
connector->display_info.raw_edid = (char *)raw_edid;
|
||||
|
||||
memcpy(edid, ctx->raw_edid, min((1 + ctx->raw_edid->extensions)
|
||||
* EDID_LENGTH, len));
|
||||
|
||||
|
Reference in New Issue
Block a user