[RFC][PATCH 10/11] drm: Fix debugfs edid_override locking

Ville Syrjala ville.syrjala at linux.intel.com
Tue Feb 27 12:56:59 UTC 2018


From: Ville Syrjälä <ville.syrjala at linux.intel.com>

The edid is protected by mode_config.mutex. Grab the lock when frobbing
the debugfs edid_override thing.

Cc: Keith Packard <keithp at keithp.com>
Cc: Daniel Vetter <daniel.vetter at ffwll.ch>
Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
---
 drivers/gpu/drm/drm_debugfs.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_debugfs.c b/drivers/gpu/drm/drm_debugfs.c
index b2482818fee8..caac17145629 100644
--- a/drivers/gpu/drm/drm_debugfs.c
+++ b/drivers/gpu/drm/drm_debugfs.c
@@ -275,11 +275,17 @@ static ssize_t connector_write(struct file *file, const char __user *ubuf,
 static int edid_show(struct seq_file *m, void *data)
 {
 	struct drm_connector *connector = m->private;
-	struct drm_property_blob *edid = connector->edid_blob_ptr;
+	struct drm_property_blob *edid;
+
+	mutex_lock(&connector->dev->mode_config.mutex);
+
+	edid = connector->edid_blob_ptr;
 
 	if (connector->override_edid && edid)
 		seq_write(m, edid->data, edid->length);
 
+	mutex_unlock(&connector->dev->mode_config.mutex);
+
 	return 0;
 }
 
@@ -305,6 +311,8 @@ static ssize_t edid_write(struct file *file, const char __user *ubuf,
 
 	edid = (struct edid *) buf;
 
+	mutex_lock(&connector->dev->mode_config.mutex);
+
 	if (len == 5 && !strncmp(buf, "reset", 5)) {
 		connector->override_edid = false;
 		ret = drm_mode_connector_update_edid_property(connector, NULL);
@@ -318,6 +326,8 @@ static ssize_t edid_write(struct file *file, const char __user *ubuf,
 			connector->override_edid = true;
 	}
 
+	mutex_unlock(&connector->dev->mode_config.mutex);
+
 	kfree(buf);
 
 	return (ret) ? ret : len;
-- 
2.13.6



More information about the dri-devel mailing list