xf86-video-intel: src/sna/gen2_render.c src/sna/gen3_render.c src/sna/gen4_render.c src/sna/gen5_render.c src/sna/gen6_render.c src/sna/gen7_render.c src/sna/gen8_render.c

Chris Wilson ickle at kemper.freedesktop.org
Fri Apr 4 07:57:21 PDT 2014


 src/sna/gen2_render.c |    2 +-
 src/sna/gen3_render.c |    2 +-
 src/sna/gen4_render.c |    2 +-
 src/sna/gen5_render.c |    2 +-
 src/sna/gen6_render.c |    2 +-
 src/sna/gen7_render.c |    3 ++-
 src/sna/gen8_render.c |    2 +-
 7 files changed, 8 insertions(+), 7 deletions(-)

New commits:
commit 938eea6dee0be153fcf007549a50213f6c957305
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Apr 4 15:56:38 2014 +0100

    sna/gen2+: Beware the unattached ShmPixmap
    
    When dereferences priv, make sure it exists first. ShmPixmaps for
    example, may not have one, nor do very small buffers.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen2_render.c b/src/sna/gen2_render.c
index 698ed99..a478817 100644
--- a/src/sna/gen2_render.c
+++ b/src/sna/gen2_render.c
@@ -1564,7 +1564,7 @@ gen2_composite_picture(struct sna *sna,
 		     x + w < pixmap->drawable.width &&
 		     y + h < pixmap->drawable.height)) {
 			struct sna_pixmap *priv = sna_pixmap(pixmap);
-			if (priv->clear) {
+			if (priv && priv->clear) {
 				DBG(("%s: converting large pixmap source into solid [%08x]\n", __FUNCTION__, priv->clear_color));
 				return gen2_composite_solid_init(sna, channel, priv->clear_color);
 			}
diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c
index a30ee44..1bfc509 100644
--- a/src/sna/gen3_render.c
+++ b/src/sna/gen3_render.c
@@ -3100,7 +3100,7 @@ gen3_composite_picture(struct sna *sna,
 		     x + w < pixmap->drawable.width &&
 		     y + h < pixmap->drawable.height)) {
 			struct sna_pixmap *priv = sna_pixmap(pixmap);
-			if (priv->clear) {
+			if (priv && priv->clear) {
 				DBG(("%s: converting large pixmap source into solid [%08x]\n", __FUNCTION__, priv->clear_color));
 				return gen3_init_solid(channel, priv->clear_color);
 			}
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index 9994bf5..ee96f6c 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -1591,7 +1591,7 @@ gen4_composite_picture(struct sna *sna,
 		     x + w < pixmap->drawable.width &&
 		     y + h < pixmap->drawable.height)) {
 			struct sna_pixmap *priv = sna_pixmap(pixmap);
-			if (priv->clear) {
+			if (priv && priv->clear) {
 				DBG(("%s: converting large pixmap source into solid [%08x]\n", __FUNCTION__, priv->clear_color));
 				return gen4_channel_init_solid(sna, channel, priv->clear_color);
 			}
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 6408eec..51a9714 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -1530,7 +1530,7 @@ gen5_composite_picture(struct sna *sna,
 		     x + w < pixmap->drawable.width &&
 		     y + h < pixmap->drawable.height)) {
 			struct sna_pixmap *priv = sna_pixmap(pixmap);
-			if (priv->clear) {
+			if (priv && priv->clear) {
 				DBG(("%s: converting large pixmap source into solid [%08x]\n", __FUNCTION__, priv->clear_color));
 				return gen4_channel_init_solid(sna, channel, priv->clear_color);
 			}
diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index 867108b..319cded 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -1780,7 +1780,7 @@ gen6_composite_picture(struct sna *sna,
 		     x + w < pixmap->drawable.width &&
 		     y + h < pixmap->drawable.height)) {
 			struct sna_pixmap *priv = sna_pixmap(pixmap);
-			if (priv->clear) {
+			if (priv && priv->clear) {
 				DBG(("%s: converting large pixmap source into solid [%08x]\n", __FUNCTION__, priv->clear_color));
 				return gen4_channel_init_solid(sna, channel, priv->clear_color);
 			}
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 319f4a3..334958a 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2026,6 +2026,7 @@ gen7_composite_picture(struct sna *sna,
 	channel->repeat = picture->repeat ? picture->repeatType : RepeatNone;
 	channel->filter = picture->filter;
 
+	assert(picture->pDrawable);
 	pixmap = get_drawable_pixmap(picture->pDrawable);
 	get_drawable_deltas(picture->pDrawable, pixmap, &dx, &dy);
 
@@ -2047,7 +2048,7 @@ gen7_composite_picture(struct sna *sna,
 		     x + w < pixmap->drawable.width &&
 		     y + h < pixmap->drawable.height)) {
 			struct sna_pixmap *priv = sna_pixmap(pixmap);
-			if (priv->clear) {
+			if (priv && priv->clear) {
 				DBG(("%s: converting large pixmap source into solid [%08x]\n", __FUNCTION__, priv->clear_color));
 				return gen4_channel_init_solid(sna, channel, priv->clear_color);
 			}
diff --git a/src/sna/gen8_render.c b/src/sna/gen8_render.c
index 0c851c8..1fb9909 100644
--- a/src/sna/gen8_render.c
+++ b/src/sna/gen8_render.c
@@ -1820,7 +1820,7 @@ gen8_composite_picture(struct sna *sna,
 		     x + w < pixmap->drawable.width &&
 		     y + h < pixmap->drawable.height)) {
 			struct sna_pixmap *priv = sna_pixmap(pixmap);
-			if (priv->clear) {
+			if (priv && priv->clear) {
 				DBG(("%s: converting large pixmap source into solid [%08x]\n", __FUNCTION__, priv->clear_color));
 				return gen4_channel_init_solid(sna, channel, priv->clear_color);
 			}


More information about the xorg-commit mailing list