]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/amd/display: Fix NULL deref and buffer over-read in SDP debugfs
authorHarry Wentland <harry.wentland@amd.com>
Mon, 11 May 2026 20:46:25 +0000 (16:46 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 3 Jun 2026 18:44:13 +0000 (14:44 -0400)
[Why & How]
dp_sdp_message_debugfs_write() dereferences connector->base.state->crtc
without checking for NULL. A connector can be connected but not bound to
any CRTC (e.g. after hot-plug before the next atomic commit), causing a
kernel crash when writing to the sdp_message debugfs node.

The function also ignores the user-provided size argument and always
passes 36 bytes to copy_from_user(), reading past the user buffer when
size < 36.

Fix both issues by:
- Returning -ENODEV when connector->base.state or state->crtc is NULL
- Clamping write_size to min(size, sizeof(data))

Fixes: c7ba3653e977 ("drm/amd/display: Generic SDP message access in amdgpu")
Assisted-by: Copilot:claude-opus-4.6
Reviewed-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Ray Wu <ray.wu@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 6ab4c36a522842ff70474a1c0af2e40e50fc8300)
Cc: stable@vger.kernel.org
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c

index 2409ac72b1667b082fc3ae8ce7b83e788e35aaef..3a3d01ce0d424701953a21a4b156418e27ef5ae6 100644 (file)
@@ -1344,8 +1344,13 @@ static ssize_t dp_sdp_message_debugfs_write(struct file *f, const char __user *b
        if (size == 0)
                return 0;
 
+       if (!connector->base.state || !connector->base.state->crtc)
+               return -ENODEV;
+
        acrtc_state = to_dm_crtc_state(connector->base.state->crtc->state);
 
+       write_size = min_t(size_t, size, sizeof(data));
+
        r = copy_from_user(data, buf, write_size);
 
        write_size -= r;