[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xserver-xorg-video-intel: Changes to 'debian-squeeze'



 debian/changelog |    9 +++++++++
 uxa/uxa-render.c |   37 +++++++++++++++++++++----------------
 2 files changed, 30 insertions(+), 16 deletions(-)

New commits:
commit 0ce1901415a3c3fa1c9794637cb9242d12702c19
Author: Cyril Brulebois <kibi@debian.org>
Date:   Thu Feb 17 23:21:01 2011 +0100

    Document the cherry-pick (Closes: #613830).

diff --git a/debian/changelog b/debian/changelog
index e30b885..0ccd091 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+xserver-xorg-video-intel (2:2.13.0-6) UNRELEASED; urgency=low
+
+  * Cherry-pick from upstream:
+    - uxa: Fallback if the temporary is too large
+  * This fixes a null pointer dereference with some rendering operations
+    involving large pictures (Closes: #613830). Thanks, Enrico!
+
+ -- Cyril Brulebois <kibi@debian.org>  Thu, 17 Feb 2011 23:20:47 +0100
+
 xserver-xorg-video-intel (2:2.13.0-5) unstable; urgency=low
 
   [ Julien Cristau ]

commit 91af3c5ead6157ed065ccd3e3cc413c945182488
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Thu Feb 17 16:48:24 2011 +0000

    uxa: Fallback if the temporary is too large
    
    If the render operation requires a temporary source Picture and the
    operation is large, larger than the maximum permitted bo, then we will
    fail to allocate the bo. In this case, we need to fallback and perform
    the operation on the CPU rather than dereference a NULL bo.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=34399
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
    (cherry picked from commit 4c66b28870b050493ad96f7b0fe2d70d7ee539c7)

diff --git a/uxa/uxa-render.c b/uxa/uxa-render.c
index fd8eb93..a6fe8f8 100644
--- a/uxa/uxa-render.c
+++ b/uxa/uxa-render.c
@@ -460,12 +460,12 @@ uxa_try_driver_solid_fill(PicturePtr pSrc,
 }
 
 static PicturePtr
-uxa_picture_for_pixman_format(ScreenPtr pScreen,
+uxa_picture_for_pixman_format(ScreenPtr screen,
 			      pixman_format_code_t format,
 			      int width, int height)
 {
-	PicturePtr pPicture;
-	PixmapPtr pPixmap;
+	PicturePtr picture;
+	PixmapPtr pixmap;
 	int error;
 
 	if (format == PIXMAN_a1)
@@ -475,24 +475,29 @@ uxa_picture_for_pixman_format(ScreenPtr pScreen,
 	if (PIXMAN_FORMAT_A(format) == 0)
 	    format = PIXMAN_a8r8g8b8;
 
-	pPixmap = (*pScreen->CreatePixmap)(pScreen, width, height,
-					   PIXMAN_FORMAT_DEPTH(format),
-					   UXA_CREATE_PIXMAP_FOR_MAP);
-	if (!pPixmap)
+	pixmap = screen->CreatePixmap(screen, width, height,
+					PIXMAN_FORMAT_DEPTH(format),
+					UXA_CREATE_PIXMAP_FOR_MAP);
+	if (!pixmap)
 		return 0;
 
-	pPicture = CreatePicture(0, &pPixmap->drawable,
-				 PictureMatchFormat(pScreen,
-						    PIXMAN_FORMAT_DEPTH(format),
-						    format),
-				 0, 0, serverClient, &error);
-	(*pScreen->DestroyPixmap) (pPixmap);
-	if (!pPicture)
+	if (!uxa_pixmap_is_offscreen(pixmap)) {
+		screen->DestroyPixmap(pixmap);
+		return 0;
+	}
+
+	picture = CreatePicture(0, &pixmap->drawable,
+				PictureMatchFormat(screen,
+						   PIXMAN_FORMAT_DEPTH(format),
+						   format),
+				0, 0, serverClient, &error);
+	screen->DestroyPixmap(pixmap);
+	if (!picture)
 		return 0;
 
-	ValidatePicture(pPicture);
+	ValidatePicture(picture);
 
-	return pPicture;
+	return picture;
 }
 
 static PicturePtr


Reply to: