Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp3108663imu; Mon, 19 Nov 2018 10:44:22 -0800 (PST) X-Google-Smtp-Source: AFSGD/XITETqJ93SVcJuBkdOnh+ANsaJudTgERLWKvWiPFs/bpFkcMQFOddv/egFVcC1q6V8hP39 X-Received: by 2002:a17:902:4222:: with SMTP id g31mr3806114pld.240.1542653062693; Mon, 19 Nov 2018 10:44:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542653062; cv=none; d=google.com; s=arc-20160816; b=G4iIH/bY2J9BBavzS1q4Q8aLTBDSMhtJuXV7oDkmFlS61hNdKQds2YpRMojSzxbe2G AsuTJ6cWqZhhOx28+Fmb3J00RAb7GS3SjjgNaXJpZ0lPlvVEumxU3a+rVM7HHJm4arAd i+IVyWFMFEnzNzQoIydfeRgWGIaom6Fqyqq6gRV1msed1Kdp2owuhBW+WGMTsaYGMhkE WexGwrtEHRHGhcuJ8O4uUxL6cQEPcLq6Yxn40BVr5UOhIzJva3UncIPoaPfw5tFs2iYk MNymj3cbrQix2WCIOMIMTBoFrteZdkKZeZSiqLpSQscYFqe2Pl0OawQTSSwz7wohK75K UjBQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=hrOjH/2aWmcBfBuPJ7gxiQNa1/4szRkWB0dOQhJYWYs=; b=DyuPv+nBzSrW5S/uLLTpOTZpfo+PR+d8z44Q0qB4BBCz/7LrBDfJdUr90KCN41QuAr BSo3Hm/HQ5byklAASvRDdridMNWZsPliGLQBiWkeqT2U6++b0gPQRebKNhLt1WcBeal+ AiFi1RMvQNy9DxogoZw704EqczwwaY/MCZdqsxOcf5MR0pS8HJvGXangl3fkm0mbijxW uJ7myBXqGkLAyvVWCVWmFH2OAl3bQygeuaq9TDMU63ZVpMzPSbyl8idCPITKmUyC3tsM Pb9HhBE0u4YY0mA8lE+emh0C3JFwLAZ7Sk6m5nHj6fN1/qmuRb1q3e6G477b8tpojl54 dEYw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=lBm63FfB; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d13si30687618pgh.196.2018.11.19.10.44.07; Mon, 19 Nov 2018 10:44:22 -0800 (PST) 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; dkim=pass header.i=@kernel.org header.s=default header.b=lBm63FfB; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732419AbeKTDCX (ORCPT + 99 others); Mon, 19 Nov 2018 22:02:23 -0500 Received: from mail.kernel.org ([198.145.29.99]:34606 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731481AbeKTDCW (ORCPT ); Mon, 19 Nov 2018 22:02:22 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 73665208E4; Mon, 19 Nov 2018 16:38:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1542645492; bh=/1y6gyXBiWwvPgvek/pjSB062nejiWElFvrnFACCic8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lBm63FfBCvLvzXj1keqlw+oml/1rUQOMytojFFtvG5THbWvbOO0xjhF/vH4TJZh7Z CVQh1HmcRK+qRDKvj9NOn4iQwUV7G86otQFIARC2lRr5ngN0VzdHIihoryApBLtBXg /4B6QjUOIfkle6FxYGZAzwAsFfMEqTIAuMhYoMyc= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Lyude Paul , Daniel Vetter , Joonas Lahtinen Subject: [PATCH 4.19 182/205] drm/atomic_helper: Disallow new modesets on unregistered connectors Date: Mon, 19 Nov 2018 17:28:09 +0100 Message-Id: <20181119162641.329924072@linuxfoundation.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181119162616.586062722@linuxfoundation.org> References: <20181119162616.586062722@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.19-stable review patch. If anyone has any objections, please let me know. ------------------ From: Lyude Paul commit e96550956fbcd090629c0e2b5b8cded2eded2adf upstream. 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. Changes since v5: - Fix typo in comment, nothing else Signed-off-by: Lyude Paul Reviewed-by: Daniel Vetter Cc: stable@vger.kernel.org Link: https://patchwork.freedesktop.org/patch/msgid/20181008232437.5571-2-lyude@redhat.com (cherry picked from commit 4d80273976bf880c4bed9359b8f2d45663140c86) Signed-off-by: Joonas Lahtinen Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/drm_atomic_helper.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) --- 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_atom 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 its 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_atom 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",