Received: by 2002:ac0:a582:0:0:0:0:0 with SMTP id m2-v6csp38611imm; Thu, 4 Oct 2018 17:30:44 -0700 (PDT) X-Google-Smtp-Source: ACcGV61j1WpC1weOLk27lxpSQxKx+jjOIMEhN2pm3SrgsueX39DVXYj5/R1XLhUJCTZ1V9TKCmZ2 X-Received: by 2002:a62:e091:: with SMTP id d17-v6mr9093611pfm.214.1538699444132; Thu, 04 Oct 2018 17:30:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538699444; cv=none; d=google.com; s=arc-20160816; b=dIblb+Bs7daUYALQQYw+v04AtW8GCMi8uztdKMRY6jyBwDRJhLAisrCYHUtM7tad/z B3LD2Tl3IwRjGeXQ9KklOm0p3lyoEXO/GSFBpi22Us72ESbXKPC6Cri9Za6k1DKeiN2K ZAzMLvueS5/gdtk6BdW1TiWnEuAtfVoQ6tJCpjJ6zPKzaJ+K1/b6dS4gErZri5l+HhmZ 1IHFj/hDVRj8WK9BOm3imBFoYHrbrv+5G0Boqpxcf7oxqWq3Fs1ryZodN0UKcwD4zs10 2LXfba2Wm/fxKibp15mtsVuXsQBxgLwZmqeg3FJcAtG43EpuKPWsXnIiYWQpLKLAMIEX ALqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=1kwkuIf9bc+qh0TiYmD18LH0QQKX6wF/+HcrvGD6vZc=; b=BjFH3gr6bRxAHmA/s0FI16lMGzKEYrAgiaTtU2f4T94/fcvhvvTDMXqbF8TRDHKSwr FSSeaXJPVj3SIPxssGIPEbETkUo0EarZv4SMDjCAv3+N4iuhpcD1QArzNCAjClfJv4Dy /2UyG87Pp4TaXXu5n+A1QGyZbVCIF/Hsu8bNNvnzvxHBjepzjsR4gMIAMsxxecBQWpwd 2qQfoTkkVH9p8ySuQm+4GH7dmUotNZv+2eQc8AVKVflpUOit0GMX21x444/ugkT2gBHj upcxhChI9ALWda7LNHP9fO6dylXZ8QE2ag68BfQg6NinWQ78Z1Pk365kUy4RuviqLzMC 1t4g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x10-v6si6374756plo.100.2018.10.04.17.30.27; Thu, 04 Oct 2018 17:30:44 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727526AbeJEH0T (ORCPT + 99 others); Fri, 5 Oct 2018 03:26:19 -0400 Received: from mx1.redhat.com ([209.132.183.28]:44420 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726674AbeJEH0S (ORCPT ); Fri, 5 Oct 2018 03:26:18 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9E65F308AA0E; Fri, 5 Oct 2018 00:30:14 +0000 (UTC) Received: from malachite.bss.redhat.com (dhcp-10-20-1-11.bss.redhat.com [10.20.1.11]) by smtp.corp.redhat.com (Postfix) with ESMTP id E5AAB18BAC; Fri, 5 Oct 2018 00:30:11 +0000 (UTC) From: Lyude Paul To: nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org Cc: Daniel Vetter , Jani Nikula , stable@vger.kernel.org, Gustavo Padovan , Maarten Lankhorst , Sean Paul , David Airlie , linux-kernel@vger.kernel.org Subject: [PATCH v4 1/5] drm/atomic_helper: Disallow new modesets on unregistered connectors Date: Thu, 4 Oct 2018 20:29:50 -0400 Message-Id: <20181005002956.7317-2-lyude@redhat.com> In-Reply-To: <20181005002956.7317-1-lyude@redhat.com> References: <20181005002956.7317-1-lyude@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.41]); Fri, 05 Oct 2018 00:30:14 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org With the exception of modesets which would switch the DPMS state of a connector from on to off, we want to make sure that we disallow all modesets which would result in enabling a new monitor or a new mode configuration on a monitor if the connector for the display in question is no longer registered. This allows us to stop userspace from trying to enable new displays on connectors for an MST topology that were just removed from the system, without preventing userspace from disabling DPMS on those connectors. Signed-off-by: Lyude Paul Cc: stable@vger.kernel.org --- drivers/gpu/drm/drm_atomic_helper.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c index 80be74df7ba6..ce2decfc6826 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c @@ -307,6 +307,26 @@ update_connector_routing(struct drm_atomic_state *state, return 0; } + crtc_state = drm_atomic_get_new_crtc_state(state, + new_connector_state->crtc); + /* + * For compatibility with legacy users, we want to make sure that + * we allow DPMS On->Off modesets on unregistered connectors. Modesets + * which would result in anything else must be considered invalid, to + * avoid turning on new displays on dead connectors. + * + * Since the connector can be unregistered at any point during an + * atomic check or commit, this is racy. But that's OK: all we care + * about is ensuring that userspace can't do anything but shut off the + * display on a connector that was destroyed after it's been notified, + * not before. + */ + if (!READ_ONCE(connector->registered) && crtc_state->active) { + DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] is not registered\n", + connector->base.id, connector->name); + return -EINVAL; + } + funcs = connector->helper_private; if (funcs->atomic_best_encoder) @@ -351,7 +371,6 @@ update_connector_routing(struct drm_atomic_state *state, set_best_encoder(state, new_connector_state, new_encoder); - crtc_state = drm_atomic_get_new_crtc_state(state, new_connector_state->crtc); crtc_state->connectors_changed = true; DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] using [ENCODER:%d:%s] on [CRTC:%d:%s]\n", -- 2.17.1