xserver: Branch 'master'

Keith Packard keithp at kemper.freedesktop.org
Sun May 23 17:29:32 PDT 2010


 dix/devices.c  |    3 ++-
 mi/midispcur.c |    2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

New commits:
commit b9f48d60bc0c839bd323c582231e8e7e2b810af6
Author: Jamey Sharp <jamey at minilop.net>
Date:   Wed May 19 10:44:33 2010 -0700

    Device init: Don't crash when CreateGC fails.
    
    ActivateDevice was ignoring errors from DeviceCursorInitialize, so
    cursor-related calls failed later. Jeremy Huddleston saw that crash in
    miPointerConstrainCursor, while with Xvfb I saw it in
    miSpriteRealizeCursor.
    
    miDCDeviceCleanup frees any non-NULL GCs. miDCDeviceInitialize calls
    Cleanup on any failure, but if it failed early then some of the pointers
    in the miDCBufferPtr were garbage. Switch from malloc to calloc to
    ensure everything's initialized safely first.
    
    With these two fixes, if CreateGC fails then the server gracefully fails
    in FatalError instead of segfaulting.
    
    Signed-off-by: Jamey Sharp <jamey at minilop.net>
    Cc: Peter Hutterer <peter.hutterer at who-t.net>
    Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/dix/devices.c b/dix/devices.c
index ab8c3f9..cf23bc6 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -463,7 +463,8 @@ ActivateDevice(DeviceIntPtr dev, BOOL sendevent)
 
     /* Initialize memory for sprites. */
     if (IsMaster(dev) && dev->spriteInfo->spriteOwner)
-        pScreen->DeviceCursorInitialize(dev, pScreen);
+        if (!pScreen->DeviceCursorInitialize(dev, pScreen))
+            ret = BadAlloc;
 
     SendDevicePresenceEvent(dev->id, DeviceAdded);
     if (sendevent)
diff --git a/mi/midispcur.c b/mi/midispcur.c
index 61e3133..16495e4 100644
--- a/mi/midispcur.c
+++ b/mi/midispcur.c
@@ -742,7 +742,7 @@ miDCDeviceInitialize(DeviceIntPtr pDev, ScreenPtr pScreen)
     {
         pScreen = screenInfo.screens[i];
 
-        pBuffer = malloc(sizeof(miDCBufferRec));
+        pBuffer = calloc(1, sizeof(miDCBufferRec));
         if (!pBuffer)
             goto failure;
 


More information about the xorg-commit mailing list