aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/5057-drm-amd-display-Guard-against-null-crtc-in-CRC-IRQ.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/5057-drm-amd-display-Guard-against-null-crtc-in-CRC-IRQ.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/5057-drm-amd-display-Guard-against-null-crtc-in-CRC-IRQ.patch50
1 files changed, 50 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/5057-drm-amd-display-Guard-against-null-crtc-in-CRC-IRQ.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/5057-drm-amd-display-Guard-against-null-crtc-in-CRC-IRQ.patch
new file mode 100644
index 00000000..21eb8eb2
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/5057-drm-amd-display-Guard-against-null-crtc-in-CRC-IRQ.patch
@@ -0,0 +1,50 @@
+From 45f20843c6c83ecfd5329b3e4d66396690a29438 Mon Sep 17 00:00:00 2001
+From: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
+Date: Fri, 3 Aug 2018 10:40:20 -0400
+Subject: [PATCH 5057/5725] drm/amd/display: Guard against null crtc in CRC IRQ
+
+[Why]
+
+A null pointer deference can occur if crtc is null in
+amdgpu_dm_crtc_handle_crc_irq. This can happen if get_crtc_by_otg_inst
+returns NULL during dm_crtc_high_irq, leading to a hang in some IGT
+test cases.
+
+[How]
+
+Check that CRTC is non-null before accessing its fields.
+
+Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
+Reviewed-by: Sun peng Li <Sunpeng.Li@amd.com>
+Acked-by: Leo Li <sunpeng.li@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
+index ad80991..ce01920 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c
+@@ -98,10 +98,16 @@ int amdgpu_dm_crtc_set_crc_source(struct drm_crtc *crtc, const char *src_name,
+ */
+ void amdgpu_dm_crtc_handle_crc_irq(struct drm_crtc *crtc)
+ {
+- struct dm_crtc_state *crtc_state = to_dm_crtc_state(crtc->state);
+- struct dc_stream_state *stream_state = crtc_state->stream;
++ struct dm_crtc_state *crtc_state;
++ struct dc_stream_state *stream_state;
+ uint32_t crcs[3];
+
++ if (crtc == NULL)
++ return;
++
++ crtc_state = to_dm_crtc_state(crtc->state);
++ stream_state = crtc_state->stream;
++
+ /* Early return if CRC capture is not enabled. */
+ if (!crtc_state->crc_enabled)
+ return;
+--
+2.7.4
+