From: Ville Syrj?l? <ville.syrj...@linux.intel.com>

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 at linux.intel.com>
---
 drivers/gpu/drm/drm_crtc.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index d2e09d9..9ccb92f 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -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;
 }
-- 
1.7.3.4

Reply via email to