[PATCH 3/3] drm/amd/display: skip MST slot release if port is gone
From: Arthur Liberman
Date: Tue Sep 22 2026 - 12:03:32 EST
>From b554858dc4f2c48be0d44e3c66ed781842365bd1 Mon Sep 17 00:00:00 2001
Message-ID: <b554858dc4f2c48be0d44e3c66ed781842365bd1.1790083445.git.arthur_liberman@xxxxxxxxxxx>
In-Reply-To: <cover.1790083445.git.arthur_liberman@xxxxxxxxxxx>
References: <cover.1790083445.git.arthur_liberman@xxxxxxxxxxx>
From: Arthur Liberman <arthur_liberman@xxxxxxxxxxx>
Date: Mon, 21 Sep 2026 16:36:52 +0300
Subject: [PATCH 3/3] drm/amd/display: skip MST slot release if port is gone
dm_dp_mst_atomic_check() always called
drm_dp_atomic_release_time_slots() even when mst_root or the output
port connector was already cleared after an MST topology restart.
That is the amdgpu side of the kwin_wayland NULL deref in the helper.
Do not call the helper unless mst_root, the port, and port->connector
are still present.
Fixes: 3261e013c0ca ("drm/amd/display: Add MST atomic routines")
Cc: stable@xxxxxxxxxxxxxxx
Assisted-by: Cursor:xai-grok-4.6
Signed-off-by: Arthur Liberman <arthur_liberman@xxxxxxxxxxx>
---
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
index a5b15bef8aa0..104b874b6ef6 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
@@ -614,9 +614,13 @@ STATIC_IFN_KUNIT int dm_dp_mst_atomic_check(struct drm_connector *connector,
struct drm_atomic_commit *state)
{
struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
- struct drm_dp_mst_topology_mgr *mst_mgr = &aconnector->mst_root->mst_mgr;
+ struct drm_dp_mst_topology_mgr *mst_mgr;
struct drm_dp_mst_port *mst_port = aconnector->mst_output_port;
+ if (!aconnector->mst_root || !mst_port || !mst_port->connector)
+ return 0;
+
+ mst_mgr = &aconnector->mst_root->mst_mgr;
return drm_dp_atomic_release_time_slots(state, mst_mgr, mst_port);
}
EXPORT_IF_KUNIT(dm_dp_mst_atomic_check);
--
2.55.0