drm: Fix memory leak in drm_mode_setcrtc()
The mode passed to the .set_config() hook was never freed. The drivers will make a copy of the mode, so simply free it when done. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
1dd6c8bda9
commit
ee34ab5b01
|
@ -643,6 +643,9 @@ EXPORT_SYMBOL(drm_mode_create);
|
||||||
*/
|
*/
|
||||||
void drm_mode_destroy(struct drm_device *dev, struct drm_display_mode *mode)
|
void drm_mode_destroy(struct drm_device *dev, struct drm_display_mode *mode)
|
||||||
{
|
{
|
||||||
|
if (!mode)
|
||||||
|
return;
|
||||||
|
|
||||||
drm_mode_object_put(dev, &mode->base);
|
drm_mode_object_put(dev, &mode->base);
|
||||||
|
|
||||||
kfree(mode);
|
kfree(mode);
|
||||||
|
@ -1812,6 +1815,11 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
|
||||||
}
|
}
|
||||||
|
|
||||||
mode = drm_mode_create(dev);
|
mode = drm_mode_create(dev);
|
||||||
|
if (!mode) {
|
||||||
|
ret = -ENOMEM;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
drm_crtc_convert_umode(mode, &crtc_req->mode);
|
drm_crtc_convert_umode(mode, &crtc_req->mode);
|
||||||
drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V);
|
drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V);
|
||||||
}
|
}
|
||||||
|
@ -1881,6 +1889,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
|
||||||
|
|
||||||
out:
|
out:
|
||||||
kfree(connector_set);
|
kfree(connector_set);
|
||||||
|
drm_mode_destroy(dev, mode);
|
||||||
mutex_unlock(&dev->mode_config.mutex);
|
mutex_unlock(&dev->mode_config.mutex);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue