Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2976417imu; Mon, 19 Nov 2018 08:52:45 -0800 (PST) X-Google-Smtp-Source: AJdET5cvzQwi3u7MBjwyZoIl2mJf4sAfsQ55n4MlNL1xia6VLRemFUNYhGg17gpVbJR/EXhHE0Ay X-Received: by 2002:a63:314c:: with SMTP id x73mr20999726pgx.323.1542646365282; Mon, 19 Nov 2018 08:52:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542646365; cv=none; d=google.com; s=arc-20160816; b=Xrf9rfPdgxnyKhBOP4HUDJ6FWqGZeZ7U3qxZQicCdXuJRKSf6wScxuQbJjevg83soI DWctUoXjTBN0DKXiIc1vcYVUHsTK4pofSsgkySz53T7smuNuahQpmg3kraV4L2ufvHqJ Zae6rMq4yXt2+BAn6bTSe9zl/Mpu1gpVNrCoivVdryDFK0Iz8k6rNBwdG1OrOX039wDb 2P3ssMH5bvsyckh0XJMoYBMweLd9TKnzovAGZXMaM7yw+/8BHIJdDkOs9dbmn2+FkWwQ ojGEeFGGEKHRTULi+m+c6jh12Sg/hNX5EH62Mj6VffzW5N8lL1bIepRNwB6QFOcabEYY G5xQ== 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=WR7xwN/oek5G6/8fCLrgyLTVOPiZc1kdGsNGD72rSpI=; b=lEDhgyomiJGaJ5ec5aoEigTl2ZZRhEgGrJY/hcibU+QHJp4htrE0MzhxLWCN6l+drb hoKOfl3h3uOagniVrYwAil/AzX4G1EsYcEkyYxMt1Z4YTtTx9On6MglK4Zw5re5kFl9D b5jJHcBEef1B6H+NWacHgdUf8O9R3OK5ulrPb2p4fPaseoYRtcBMk+PjQsM7msS7npBt atQITa5X+X3amUxwtgN7Klk1CAVXl3WZxHdSf8pK3hu5uqx046qwgtNJHhDhTti8GVyU XZnKEURATudXWJPJtd5fSSjdKu2Up9s4hau41k2ukWZMWuoVM7n7Yav4NWgEZuHi7bZe GBRQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=pTk3jDxF; 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 s17si39008903pgi.513.2018.11.19.08.52.30; Mon, 19 Nov 2018 08:52:45 -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=pTk3jDxF; 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 S2390360AbeKTDPv (ORCPT + 99 others); Mon, 19 Nov 2018 22:15:51 -0500 Received: from mail.kernel.org ([198.145.29.99]:53612 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389340AbeKTDPv (ORCPT ); Mon, 19 Nov 2018 22:15:51 -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 2137120C01; Mon, 19 Nov 2018 16:51:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1542646297; bh=O/McACdSglckx3ndeW2uFBN3mFJRAOXtZZpSak1EGEk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pTk3jDxFjfh+hMzIVpw01PwWOhtG3l8jK6e7Fq0y9Fz+itlGvriOawqbtLIJeygEB lV76HSCXHjhopMgL2plRCuAbIqYU13MxHp5vQBpcoMLbkzAxk7GX6ZGWK/ch1W6TBI pw8hhPnputnLpz8rS41sKe0RPB9X2jP4uwb3jJ5I= 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.14 111/124] drm/atomic_helper: Disallow new modesets on unregistered connectors Date: Mon, 19 Nov 2018 17:29:25 +0100 Message-Id: <20181119162632.659157383@linuxfoundation.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181119162612.951907286@linuxfoundation.org> References: <20181119162612.951907286@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.14-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 @@ -306,6 +306,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) @@ -350,7 +370,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",