diff options
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.patch | 50 |
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 + |