From: Greg Kroah-Hartman Date: Mon, 26 Jun 2017 13:39:49 +0000 (+0200) Subject: 4.11-stable patches X-Git-Tag: v3.18.59~12 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a3389bea440a5bb08b13faac5118f5e385e94e0d;p=thirdparty%2Fkernel%2Fstable-queue.git 4.11-stable patches added patches: drm-fix-getconnector-regression.patch --- diff --git a/queue-4.11/drm-fix-getconnector-regression.patch b/queue-4.11/drm-fix-getconnector-regression.patch new file mode 100644 index 00000000000..5a069b40e66 --- /dev/null +++ b/queue-4.11/drm-fix-getconnector-regression.patch @@ -0,0 +1,113 @@ +From e94ac3510b6a0f696f2c442c4fc4051c8101ef12 Mon Sep 17 00:00:00 2001 +From: Daniel Vetter +Date: Tue, 20 Jun 2017 22:28:37 +0200 +Subject: drm: Fix GETCONNECTOR regression + +From: Daniel Vetter + +commit e94ac3510b6a0f696f2c442c4fc4051c8101ef12 upstream. + +In + +commit 91eefc05f0ac71902906b2058360e61bd25137fe +Author: Daniel Vetter +Date: Wed Dec 14 00:08:10 2016 +0100 + + drm: Tighten locking in drm_mode_getconnector + +I reordered the logic a bit in that IOCTL, but that broke userspace +since it'll get the new mode list, but not the new property values. +Fix that again. + +v2: Fix up the error path handling when copy_to_user for the modes +failes (Dhinakaran). + +Fixes: 91eefc05f0ac ("drm: Tighten locking in drm_mode_getconnector") +Cc: Sean Paul +Cc: Daniel Vetter +Cc: Jani Nikula +Cc: David Airlie +Cc: dri-devel@lists.freedesktop.org +Reported-by: "H.J. Lu" +Tested-by: "H.J. Lu" +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100576 +Cc: "H.J. Lu" +Cc: "Pandiyan, Dhinakaran" +Reviewed-by: Sean Paul +Reviewed-by: Dhinakaran Pandiyan +Signed-off-by: Daniel Vetter +Link: http://patchwork.freedesktop.org/patch/msgid/20170620202837.1701-1-daniel.vetter@ffwll.ch +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/drm_connector.c | 38 ++++++++++++++++++++------------------ + 1 file changed, 20 insertions(+), 18 deletions(-) + +--- a/drivers/gpu/drm/drm_connector.c ++++ b/drivers/gpu/drm/drm_connector.c +@@ -1169,21 +1169,6 @@ int drm_mode_getconnector(struct drm_dev + if (!connector) + return -ENOENT; + +- drm_modeset_lock(&dev->mode_config.connection_mutex, NULL); +- encoder = drm_connector_get_encoder(connector); +- if (encoder) +- out_resp->encoder_id = encoder->base.id; +- else +- out_resp->encoder_id = 0; +- +- ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic, +- (uint32_t __user *)(unsigned long)(out_resp->props_ptr), +- (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr), +- &out_resp->count_props); +- drm_modeset_unlock(&dev->mode_config.connection_mutex); +- if (ret) +- goto out_unref; +- + for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) + if (connector->encoder_ids[i] != 0) + encoders_count++; +@@ -1196,7 +1181,7 @@ int drm_mode_getconnector(struct drm_dev + if (put_user(connector->encoder_ids[i], + encoder_ptr + copied)) { + ret = -EFAULT; +- goto out_unref; ++ goto out; + } + copied++; + } +@@ -1240,15 +1225,32 @@ int drm_mode_getconnector(struct drm_dev + if (copy_to_user(mode_ptr + copied, + &u_mode, sizeof(u_mode))) { + ret = -EFAULT; ++ mutex_unlock(&dev->mode_config.mutex); ++ + goto out; + } + copied++; + } + } + out_resp->count_modes = mode_count; +-out: + mutex_unlock(&dev->mode_config.mutex); +-out_unref: ++ ++ drm_modeset_lock(&dev->mode_config.connection_mutex, NULL); ++ encoder = drm_connector_get_encoder(connector); ++ if (encoder) ++ out_resp->encoder_id = encoder->base.id; ++ else ++ out_resp->encoder_id = 0; ++ ++ /* Only grab properties after probing, to make sure EDID and other ++ * properties reflect the latest status. */ ++ ret = drm_mode_object_get_properties(&connector->base, file_priv->atomic, ++ (uint32_t __user *)(unsigned long)(out_resp->props_ptr), ++ (uint64_t __user *)(unsigned long)(out_resp->prop_values_ptr), ++ &out_resp->count_props); ++ drm_modeset_unlock(&dev->mode_config.connection_mutex); ++ ++out: + drm_connector_unreference(connector); + + return ret; diff --git a/queue-4.11/series b/queue-4.11/series index cd6d0e6139c..96ae65293df 100644 --- a/queue-4.11/series +++ b/queue-4.11/series @@ -49,3 +49,4 @@ drm-amdgpu-add-polaris12-did.patch acpi-scan-apply-default-enumeration-to-devices-with-acpi-drivers.patch acpi-scan-fix-enumeration-for-special-spi-and-i2c-devices.patch rxrpc-fix-several-cases-where-a-padded-len-isn-t-checked-in-ticket-decode.patch +drm-fix-getconnector-regression.patch