[PATCH 3/3] Move pixmap size limit checking to CreatePixmap, from screen hooks.

Jeremy Huddleston jeremyhu at freedesktop.org
Sat Oct 1 23:16:30 PDT 2011


Looks like "the right way" to me

Reviewed-by: Jeremy Huddleston <jeremyhu at apple.com>

On Oct 1, 2011, at 11:08 PM, Jamey Sharp wrote:

> Commit by Jamey Sharp and Josh Triplett.
> 
> Signed-off-by: Jamey Sharp <jamey at minilop.net>
> Signed-off-by: Josh Triplett <josh at joshtriplett.org>
> ---
> dix/pixmap.c             |    7 ++++++-
> exa/exa_classic.c        |    3 ---
> exa/exa_driver.c         |    5 -----
> exa/exa_mixed.c          |    5 -----
> fb/fbpixmap.c            |    2 --
> hw/xfree86/xaa/xaaInit.c |    3 ---
> 6 files changed, 6 insertions(+), 19 deletions(-)
> 
> diff --git a/dix/pixmap.c b/dix/pixmap.c
> index 232188c..e6654f4 100644
> --- a/dix/pixmap.c
> +++ b/dix/pixmap.c
> @@ -108,7 +108,12 @@ FreeScratchPixmapsForScreen(int scrnum)
> PixmapPtr
> CreatePixmap(ScreenPtr pScreen, int width, int height, int depth, unsigned usage_hint)
> {
> -    PixmapPtr pPixmap = dixAllocateObjectWithPrivates(PixmapRec, PRIVATE_PIXMAP);
> +    PixmapPtr pPixmap;
> +
> +    if (width > 32767 || height > 32767)
> +	return NullPixmap;
> +
> +    pPixmap = dixAllocateObjectWithPrivates(PixmapRec, PRIVATE_PIXMAP);
>     if (!pPixmap)
>         return NullPixmap;
>     pPixmap->drawable.type = DRAWABLE_PIXMAP;
> diff --git a/exa/exa_classic.c b/exa/exa_classic.c
> index a40f3aa..8d740ab 100644
> --- a/exa/exa_classic.c
> +++ b/exa/exa_classic.c
> @@ -64,9 +64,6 @@ exaCreatePixmap_classic(PixmapPtr pPixmap)
>     Bool ret;
>     ExaScreenPriv(pScreen);
> 
> -    if (w > 32767 || h > 32767)
> -	return FALSE;
> -
>     swap(pExaScr, pScreen, CreatePixmap);
>     ret = pScreen->CreatePixmap (pPixmap);
>     swap(pExaScr, pScreen, CreatePixmap);
> diff --git a/exa/exa_driver.c b/exa/exa_driver.c
> index 5b74d73..a9f1e19 100644
> --- a/exa/exa_driver.c
> +++ b/exa/exa_driver.c
> @@ -58,9 +58,6 @@ exaCreatePixmap_driver(PixmapPtr pPixmap)
>     size_t paddedWidth, datasize;
>     ExaScreenPriv(pScreen);
> 
> -    if (w > 32767 || h > 32767)
> -	return FALSE;
> -
>     swap(pExaScr, pScreen, CreatePixmap);
>     ret = pScreen->CreatePixmap(pPixmap);
>     swap(pExaScr, pScreen, CreatePixmap);
> @@ -85,8 +82,6 @@ exaCreatePixmap_driver(PixmapPtr pPixmap)
>     }
>     else {
> 	paddedWidth = ((w * bpp + FB_MASK) >> FB_SHIFT) * sizeof(FbBits);
> -	if (paddedWidth / 4 > 32767 || h > 32767)
> -	    return FALSE;
> 
> 	exaSetFbPitch(pExaScr, pExaPixmap, w, h, bpp);
> 
> diff --git a/exa/exa_mixed.c b/exa/exa_mixed.c
> index 2e6eea2..851f062 100644
> --- a/exa/exa_mixed.c
> +++ b/exa/exa_mixed.c
> @@ -57,9 +57,6 @@ exaCreatePixmap_mixed(PixmapPtr pPixmap)
>     size_t paddedWidth;
>     ExaScreenPriv(pScreen);
> 
> -    if (w > 32767 || h > 32767)
> -	return FALSE;
> -
>     swap(pExaScr, pScreen, CreatePixmap);
>     ret = pScreen->CreatePixmap(pPixmap);
>     swap(pExaScr, pScreen, CreatePixmap);
> @@ -73,8 +70,6 @@ exaCreatePixmap_mixed(PixmapPtr pPixmap)
>     bpp = pPixmap->drawable.bitsPerPixel;
> 
>     paddedWidth = ((w * bpp + FB_MASK) >> FB_SHIFT) * sizeof(FbBits);
> -    if (paddedWidth / 4 > 32767 || h > 32767)
> -        return FALSE;
> 
>     /* We will allocate the system pixmap later if needed. */
>     pPixmap->devPrivate.ptr = NULL;
> diff --git a/fb/fbpixmap.c b/fb/fbpixmap.c
> index f135109..08bc91a 100644
> --- a/fb/fbpixmap.c
> +++ b/fb/fbpixmap.c
> @@ -35,8 +35,6 @@ fbCreatePixmapBpp (PixmapPtr pPixmap, int bpp)
>     size_t	paddedWidth;
> 
>     paddedWidth = ((pPixmap->drawable.width * bpp + FB_MASK) >> FB_SHIFT) * sizeof (FbBits);
> -    if (paddedWidth / 4 > 32767 || pPixmap->drawable.height > 32767)
> -	return FALSE;
>     datasize = pPixmap->drawable.height * paddedWidth;
> #ifdef FB_DEBUG
>     datasize += 2 * paddedWidth;
> diff --git a/hw/xfree86/xaa/xaaInit.c b/hw/xfree86/xaa/xaaInit.c
> index 5770a81..9846f4b 100644
> --- a/hw/xfree86/xaa/xaaInit.c
> +++ b/hw/xfree86/xaa/xaaInit.c
> @@ -340,9 +340,6 @@ XAACreatePixmap(PixmapPtr pPix)
>     int h = pPix->drawable.height;
>     int size = w * h;
> 
> -    if (w > 32767 || h > 32767)
> -	return FALSE;
> -    
>     if (!infoRec->offscreenDepthsInitialized)
> 	XAAInitializeOffscreenDepths (pScreen);
> 
> -- 
> 1.7.5.4
> 
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
> 

---
Jeremy Huddleston

Rebuild Sudan
 - Board of Directors
 - http://www.rebuildsudan.org

Berkeley Foundation for Opportunities in Information Technology
 - Advisory Board
 - http://www.bfoit.org



More information about the xorg-devel mailing list