From 779bafa175e6b47da086d84324f95cedd4dc487c Mon Sep 17 00:00:00 2001 From: Olivier Fourdan Date: Thu, 23 May 2019 16:26:15 +0200 Subject: [PATCH] Avoid RADEONLeaveVT_KMS() after we left the VT RADEONLeaveVT_KMS() will un-reference its all-black FB in a timer, but if we end calling RADEONLeaveVT_KMS() twice in a row, we may try to access those after they've been just freed up, and crash. Return early in RADEONLeaveVT_KMS() if the VT semaphore is unset. Bugzilla: https://bugzilla.redhat.com/1674474 Signed-off-by: Olivier Fourdan --- src/radeon_kms.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/radeon_kms.c b/src/radeon_kms.c index ff4f8dcf..0d4d2ef4 100644 --- a/src/radeon_kms.c +++ b/src/radeon_kms.c @@ -2624,6 +2624,9 @@ void RADEONLeaveVT_KMS(ScrnInfoPtr pScrn) xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG, "RADEONLeaveVT_KMS\n"); + if (xf86ScreenToScrn(pScreen)->vtSema) + return; + if (!info->r600_shadow_fb) { RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn); xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn); -- 2.21.0