projects
/
linux-2.6-microblaze.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
3126c9c
)
drm/amd/display: Check NULL before accessing
author
Alex Hung
<alex.hung@amd.com>
Fri, 7 Nov 2025 22:35:58 +0000
(15:35 -0700)
committer
Alex Deucher
<alexander.deucher@amd.com>
Wed, 26 Nov 2025 17:17:38 +0000
(12:17 -0500)
[WHAT]
IGT kms_cursor_legacy's long-nonblocking-modeset-vs-cursor-atomic
fails with NULL pointer dereference. This can be reproduced with
both an eDP panel and a DP monitors connected.
BUG: kernel NULL pointer dereference, address:
0000000000000000
#PF: supervisor read access in kernel mode
#PF: error_code(0x0000) - not-present page
PGD 0 P4D 0
Oops: Oops: 0000 [#1] SMP NOPTI
CPU: 13 UID: 0 PID: 2960 Comm: kms_cursor_lega Not tainted
6.16.0-99-custom #8 PREEMPT(voluntary)
Hardware name: AMD ........
RIP: 0010:dc_stream_get_scanoutpos+0x34/0x130 [amdgpu]
Code: 57 4d 89 c7 41 56 49 89 ce 41 55 49 89 d5 41 54 49
89 fc 53 48 83 ec 18 48 8b 87 a0 64 00 00 48 89 75 d0 48 c7 c6 e0 41 30
c2 <48> 8b 38 48 8b 9f 68 06 00 00 e8 8d d7 fd ff 31 c0 48 81 c3 e0 02
RSP: 0018:
ffffd0f3c2bd7608
EFLAGS:
00010292
RAX:
0000000000000000
RBX:
0000000000000000
RCX:
ffffd0f3c2bd7668
RDX:
ffffd0f3c2bd7664
RSI:
ffffffffc23041e0
RDI:
ffff8b32494b8000
RBP:
ffffd0f3c2bd7648
R08:
ffffd0f3c2bd766c
R09:
ffffd0f3c2bd7760
R10:
ffffd0f3c2bd7820
R11:
0000000000000000
R12:
ffff8b32494b8000
R13:
ffffd0f3c2bd7664
R14:
ffffd0f3c2bd7668
R15:
ffffd0f3c2bd766c
FS:
000071f631b68700
(0000) GS:
ffff8b399f114000
(0000)
knlGS:
0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0:
0000000080050033
CR2:
0000000000000000
CR3:
00000001b8105000
CR4:
0000000000f50ef0
PKRU:
55555554
Call Trace:
<TASK>
dm_crtc_get_scanoutpos+0xd7/0x180 [amdgpu]
amdgpu_display_get_crtc_scanoutpos+0x86/0x1c0 [amdgpu]
? __pfx_amdgpu_crtc_get_scanout_position+0x10/0x10[amdgpu]
amdgpu_crtc_get_scanout_position+0x27/0x50 [amdgpu]
drm_crtc_vblank_helper_get_vblank_timestamp_internal+0xf7/0x400
drm_crtc_vblank_helper_get_vblank_timestamp+0x1c/0x30
drm_crtc_get_last_vbltimestamp+0x55/0x90
drm_crtc_next_vblank_start+0x45/0xa0
drm_atomic_helper_wait_for_fences+0x81/0x1f0
...
Cc: Mario Limonciello <mario.limonciello@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Alex Hung <alex.hung@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit
621e55f1919640acab25383362b96e65f2baea3c
)
Cc: stable@vger.kernel.org
drivers/gpu/drm/amd/display/dc/core/dc_stream.c
patch
|
blob
|
history
diff --git
a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c
index
9ac2d41
..
0a46e83
100644
(file)
--- a/
drivers/gpu/drm/amd/display/dc/core/dc_stream.c
+++ b/
drivers/gpu/drm/amd/display/dc/core/dc_stream.c
@@
-705,9
+705,14
@@
bool dc_stream_get_scanoutpos(const struct dc_stream_state *stream,
{
uint8_t i;
bool ret = false;
- struct dc *dc = stream->ctx->dc;
- struct resource_context *res_ctx =
- &dc->current_state->res_ctx;
+ struct dc *dc;
+ struct resource_context *res_ctx;
+
+ if (!stream->ctx)
+ return false;
+
+ dc = stream->ctx->dc;
+ res_ctx = &dc->current_state->res_ctx;
dc_exit_ips_for_hw_access(dc);