Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ee34ab5b authored by Ville Syrjälä's avatar Ville Syrjälä Committed by Dave Airlie
Browse files

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: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 1dd6c8bd
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -643,6 +643,9 @@ EXPORT_SYMBOL(drm_mode_create);
 */
void drm_mode_destroy(struct drm_device *dev, struct drm_display_mode *mode)
{
	if (!mode)
		return;

	drm_mode_object_put(dev, &mode->base);

	kfree(mode);
@@ -1812,6 +1815,11 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
		}

		mode = drm_mode_create(dev);
		if (!mode) {
			ret = -ENOMEM;
			goto out;
		}

		drm_crtc_convert_umode(mode, &crtc_req->mode);
		drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V);
	}
@@ -1881,6 +1889,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,

out:
	kfree(connector_set);
	drm_mode_destroy(dev, mode);
	mutex_unlock(&dev->mode_config.mutex);
	return ret;
}