xf86-video-ati: Branch 'master' - 2 commits

Maarten Lankhorst mlankhorst at kemper.freedesktop.org
Wed Mar 20 09:29:31 PDT 2013


 src/drmmode_display.c |   14 ++++++++++++++
 src/drmmode_display.h |    1 +
 src/radeon_kms.c      |    2 ++
 3 files changed, 17 insertions(+)

New commits:
commit a4d1bc43d4d10e2ca1e512c1010e962c587d6c16
Author: Maarten Lankhorst <maarten.lankhorst at canonical.com>
Date:   Wed Mar 20 17:13:44 2013 +0100

    Cleanup drmmode in CloseScreen.
    
    Prevents a use-after-free.
    
    Signed-off-by: Maarten Lankhorst <maarten.lankhorst at canonical.com>

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 0d73856..d09c69c 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1584,6 +1584,20 @@ void drmmode_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode)
 	}
 }
 
+void drmmode_fini(ScrnInfoPtr pScrn, drmmode_ptr drmmode)
+{
+	RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
+	RADEONInfoPtr info = RADEONPTR(pScrn);
+
+	if (pRADEONEnt->fd_wakeup_registered == serverGeneration &&
+	    info->dri2.pKernelDRMVersion->version_minor >= 4) {
+		RemoveGeneralSocket(drmmode->fd);
+		RemoveBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA,
+				drm_wakeup_handler, drmmode);
+	}
+}
+
+
 Bool drmmode_set_bufmgr(ScrnInfoPtr pScrn, drmmode_ptr drmmode, struct radeon_bo_manager *bufmgr)
 {
 	drmmode->bufmgr = bufmgr;
diff --git a/src/drmmode_display.h b/src/drmmode_display.h
index 45c33cb..b63ec8e 100644
--- a/src/drmmode_display.h
+++ b/src/drmmode_display.h
@@ -99,6 +99,7 @@ typedef struct {
 
 extern Bool drmmode_pre_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int cpp);
 extern void drmmode_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode);
+extern void drmmode_fini(ScrnInfoPtr pScrn, drmmode_ptr drmmode);
 extern Bool drmmode_set_bufmgr(ScrnInfoPtr pScrn, drmmode_ptr drmmode, struct radeon_bo_manager *bufmgr);
 extern void drmmode_set_cursor(ScrnInfoPtr scrn, drmmode_ptr drmmode, int id, struct radeon_bo *bo);
 void drmmode_adjust_frame(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int x, int y);
diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index e247467..f997d8a 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -1065,6 +1065,7 @@ static Bool RADEONCloseScreen_KMS(CLOSE_SCREEN_ARGS_DECL)
 
     drmDropMaster(info->dri2.drm_fd);
 
+    drmmode_fini(pScrn, &info->drmmode);
     if (info->dri2.enabled)
 	radeon_dri2_close_screen(pScreen);
     drmClose(info->dri2.drm_fd);
commit 3cb3ab8704813d7c14b9e547a30e37598d70c85a
Author: Maarten Lankhorst <maarten.lankhorst at canonical.com>
Date:   Wed Mar 20 17:12:29 2013 +0100

    Close drm_fd in CloseScreen.
    
    This prevents a small fd leak.
    
    Signed-off-by: Maarten Lankhorst <maarten.lankhorst at canonical.com>

diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index cacdf8e..e247467 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -1067,6 +1067,7 @@ static Bool RADEONCloseScreen_KMS(CLOSE_SCREEN_ARGS_DECL)
 
     if (info->dri2.enabled)
 	radeon_dri2_close_screen(pScreen);
+    drmClose(info->dri2.drm_fd);
 
     pScrn->vtSema = FALSE;
     xf86ClearPrimInitDone(info->pEnt->index);


More information about the xorg-commit mailing list