xserver: Branch 'master' - 4 commits

Keith Packard keithp at kemper.freedesktop.org
Thu Dec 11 19:37:21 PST 2014


 glamor/glamor.c     |   21 +++++++++++++--------
 glamor/glamor_fbo.c |    2 --
 2 files changed, 13 insertions(+), 10 deletions(-)

New commits:
commit 0f5fdaf600bfeada966aea942cb3e347d4efee30
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Thu Dec 11 16:50:40 2014 +0900

    glamor: Make sure glamor_egl_close_screen wraps glamor_close_screen
    
    The other way around fails to destroy the screen pixmap EGL image:
    
    ==1782== 80 (32 direct, 48 indirect) bytes in 1 blocks are definitely lost in loss record 981 of 2,171
    ==1782==    at 0x4C28C20: malloc (vg_replace_malloc.c:296)
    ==1782==    by 0xF9D4BD2: dri2_create_image_from_dri (egl_dri2.c:1264)
    ==1782==    by 0xF9D4BD2: dri2_create_image_dma_buf (egl_dri2.c:1764)
    ==1782==    by 0xF9D4BD2: dri2_create_image_khr (egl_dri2.c:1798)
    ==1782==    by 0xF9C7937: eglCreateImageKHR (eglapi.c:1494)
    ==1782==    by 0x85D5655: _glamor_egl_create_image (glamor_egl.c:134)
    ==1782==    by 0x85D5655: glamor_egl_create_textured_pixmap (glamor_egl.c:302)
    ==1782==    by 0x85D579B: glamor_egl_create_textured_screen (glamor_egl.c:225)
    ==1782==    by 0xC1BE05D: radeon_glamor_create_screen_resources (radeon_glamor.c:67)
    ==1782==    by 0xC1B6153: RADEONCreateScreenResources_KMS (radeon_kms.c:258)
    ==1782==    by 0x4B2105: xf86CrtcCreateScreenResources (xf86Crtc.c:709)
    ==1782==    by 0x43C823: dix_main (main.c:223)
    ==1782==    by 0x6CFAB44: (below main) (libc-start.c:287)
    
    Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/glamor/glamor.c b/glamor/glamor.c
index d1aa1cf..e6e8647 100644
--- a/glamor/glamor.c
+++ b/glamor/glamor.c
@@ -424,6 +424,9 @@ glamor_init(ScreenPtr screen, unsigned int flags)
 
     glamor_set_debug_level(&glamor_debug_level);
 
+    glamor_priv->saved_procs.close_screen = screen->CloseScreen;
+    screen->CloseScreen = glamor_close_screen;
+
     /* If we are using egl screen, call egl screen init to
      * register correct close screen function. */
     if (flags & GLAMOR_USE_EGL_SCREEN) {
@@ -433,9 +436,6 @@ glamor_init(ScreenPtr screen, unsigned int flags)
             goto fail;
     }
 
-    glamor_priv->saved_procs.close_screen = screen->CloseScreen;
-    screen->CloseScreen = glamor_close_screen;
-
     glamor_priv->saved_procs.create_screen_resources =
         screen->CreateScreenResources;
     screen->CreateScreenResources = glamor_create_screen_resources;
commit c8d4c0a25dba49d1486761438b96374672b29645
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Thu Dec 11 16:50:39 2014 +0900

    glamor: Make glamor_destroy_textured_pixmap idempotent
    
    For robustness against drivers which may call both
    glamor_(egl_)destroy_textured_pixmap and glamor_destroy_pixmap.
    
    Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/glamor/glamor.c b/glamor/glamor.c
index cbd0e02..d1aa1cf 100644
--- a/glamor/glamor.c
+++ b/glamor/glamor.c
@@ -226,6 +226,7 @@ glamor_destroy_textured_pixmap(PixmapPtr pixmap)
             glamor_egl_destroy_pixmap_image(pixmap);
 #endif
             glamor_pixmap_destroy_fbo(pixmap_priv);
+            glamor_set_pixmap_private(pixmap, NULL);
         }
     }
 }
diff --git a/glamor/glamor_fbo.c b/glamor/glamor_fbo.c
index 4273826..d2aabb2 100644
--- a/glamor/glamor_fbo.c
+++ b/glamor/glamor_fbo.c
@@ -540,8 +540,6 @@ glamor_pixmap_destroy_fbo(glamor_pixmap_private *priv)
         if (fbo)
             glamor_destroy_fbo(fbo);
     }
-
-    free(priv);
 }
 
 Bool
commit 0355e280a39dee68981b2cbebfa2573cfde2f5bd
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Thu Dec 11 16:50:38 2014 +0900

    glamor: Make glamor_set_pixmap_private not crash if the pixmap has no fbo
    
    Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/glamor/glamor.c b/glamor/glamor.c
index c4f3f3a..cbd0e02 100644
--- a/glamor/glamor.c
+++ b/glamor/glamor.c
@@ -563,8 +563,11 @@ glamor_set_pixmap_private(PixmapPtr pixmap, glamor_pixmap_private *priv)
     else {
         if (old_priv == NULL)
             return;
-        fbo = glamor_pixmap_detach_fbo(old_priv);
-        glamor_purge_fbo(fbo);
+
+        if (old_priv->base.fbo) {
+            fbo = glamor_pixmap_detach_fbo(old_priv);
+            glamor_purge_fbo(fbo);
+        }
         free(old_priv);
     }
 
commit 45b333525e4626523f2b3b7bb360404b6366750d
Author: Michel Dänzer <michel.daenzer at amd.com>
Date:   Thu Dec 11 16:50:37 2014 +0900

    glamor: Fix use-after-free in glamor_destroy_textured_pixmap
    
    ==25551== Invalid read of size 8
    ==25551==    at 0x85D5F2C: glamor_egl_destroy_pixmap_image (glamor_egl.c:527)
    ==25551==    by 0x85D7750: glamor_destroy_pixmap (glamor.c:235)
    ==25551==    by 0xC1BDD9B: radeon_glamor_destroy_pixmap (radeon_glamor.c:278)
    ==25551==    by 0x5098F6: FreePicture (picture.c:1425)
    ==25551==    by 0x85DD7A9: glamor_unrealize_glyph_caches (glamor_glyphs.c:257)
    ==25551==    by 0x85D7B50: glamor_close_screen (glamor.c:586)
    ==25551==    by 0x4B1A82: xf86CrtcCloseScreen (xf86Crtc.c:734)
    ==25551==    by 0x4CFFC7: CursorCloseScreen (cursor.c:187)
    ==25551==    by 0x513A44: AnimCurCloseScreen (animcur.c:106)
    ==25551==    by 0x51529B: present_close_screen (present_screen.c:64)
    ==25551==    by 0x43CA83: dix_main (main.c:351)
    ==25551==    by 0x6CFAB44: (below main) (libc-start.c:287)
    ==25551==  Address 0x83dafa0 is 96 bytes inside a block of size 152 free'd
    ==25551==    at 0x4C29E90: free (vg_replace_malloc.c:473)
    ==25551==    by 0x85D76B4: glamor_destroy_textured_pixmap (glamor.c:225)
    ==25551==    by 0x85D7750: glamor_destroy_pixmap (glamor.c:235)
    ==25551==    by 0xC1BDD9B: radeon_glamor_destroy_pixmap (radeon_glamor.c:278)
    ==25551==    by 0x5098F6: FreePicture (picture.c:1425)
    ==25551==    by 0x85DD7A9: glamor_unrealize_glyph_caches (glamor_glyphs.c:257)
    ==25551==    by 0x85D7B50: glamor_close_screen (glamor.c:586)
    ==25551==    by 0x4B1A82: xf86CrtcCloseScreen (xf86Crtc.c:734)
    ==25551==    by 0x4CFFC7: CursorCloseScreen (cursor.c:187)
    ==25551==    by 0x513A44: AnimCurCloseScreen (animcur.c:106)
    ==25551==    by 0x51529B: present_close_screen (present_screen.c:64)
    ==25551==    by 0x43CA83: dix_main (main.c:351)
    
    Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
    Reviewed-by: Keith Packard <keithp at keithp.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/glamor/glamor.c b/glamor/glamor.c
index b32cc16..c4f3f3a 100644
--- a/glamor/glamor.c
+++ b/glamor/glamor.c
@@ -221,11 +221,12 @@ glamor_destroy_textured_pixmap(PixmapPtr pixmap)
 {
     if (pixmap->refcnt == 1) {
         glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap);
-        if (pixmap_priv != NULL)
-            glamor_pixmap_destroy_fbo(pixmap_priv);
+        if (pixmap_priv != NULL) {
 #if GLAMOR_HAS_GBM
-        glamor_egl_destroy_pixmap_image(pixmap);
+            glamor_egl_destroy_pixmap_image(pixmap);
 #endif
+            glamor_pixmap_destroy_fbo(pixmap_priv);
+        }
     }
 }
 


More information about the xorg-commit mailing list