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

Bug#692030: xorg-server: Possible memory/resource leaks



Package: xorg-server
Version: 2:1.12.4-1
Severity: minor
Tags: upstream

Hi,

I noticed (thanks to cppcheck) a number of possible leaks in xorg-server.

I have tried to manually verify each of them and produce a possible
plug for them.  I haven't actually used the changes here and would
appreciate someone with more knowledge of Xorg-server's internals
having a look at them (hench the lack of a "patch" tag).

cppcheck do find a few more leaks than the ones I have listed, but
some were false-positives and a few of them I wasn't sure how to deal
with.

~Niels
--- xorg-server-1.12.4.orig/glx/glxdri.c
+++ xorg-server-1.12.4/glx/glxdri.c
@@ -635,8 +635,10 @@
     for (i = 0; i < pScreen->numVisuals; i++, visual++)
         if (visual->vid == glxConfig->visualID)
             break;
-    if (i == pScreen->numVisuals)
+    if (i == pScreen->numVisuals) {
+        free(context);
         return NULL;
+    }
 
     context->hwContextID = FakeClientID(0);
 
only in patch2:
unchanged:
--- xorg-server-1.12.4.orig/glx/glxdri2.c
+++ xorg-server-1.12.4/glx/glxdri2.c
@@ -701,6 +701,7 @@
                      &screen->fd, &driverName, &deviceName)) {
         LogMessage(X_INFO,
                    "AIGLX: Screen %d is not DRI2 capable\n", pScreen->myNum);
+        free(screen);
         return NULL;
     }
 
only in patch2:
unchanged:
--- xorg-server-1.12.4.orig/hw/dmx/dmxfont.c
+++ xorg-server-1.12.4/hw/dmx/dmxfont.c
@@ -405,6 +405,7 @@
             free(goodfps);
             return FALSE;
         }
+        free(goodfps);
     }
 
     /* Find requested font on back-end server */
only in patch2:
unchanged:
--- xorg-server-1.12.4.orig/hw/dmx/config/dmxcompat.c
+++ xorg-server-1.12.4/hw/dmx/config/dmxcompat.c
@@ -228,5 +228,7 @@
             break;
         }
     }
+    if (filename)
+      fclose(str);
     return entry;
 }
only in patch2:
unchanged:
--- xorg-server-1.12.4.orig/hw/dmx/glxProxy/glxcmds.c
+++ xorg-server-1.12.4/hw/dmx/glxProxy/glxcmds.c
@@ -1978,6 +1978,7 @@
         }
         else {
             client->errorValue = (visual ? visual : fbconfigId);
+            free(pGlxPixmap->be_xids);
             free(pGlxPixmap);
             return BadValue;
         }
@@ -1986,6 +1987,7 @@
     }
 
     if (!(AddResource(glxpixmapId, __glXPixmapRes, pGlxPixmap))) {
+        free(pGlxPixmap->be_xids);
         free(pGlxPixmap);
         return BadAlloc;
     }
only in patch2:
unchanged:
--- xorg-server-1.12.4.orig/hw/xfree86/common/xf86sbusBus.c
+++ xorg-server-1.12.4/hw/xfree86/common/xf86sbusBus.c
@@ -641,11 +641,12 @@
     int i, index;
     sbusCmapPtr cmap;
     struct fbcmap fbcmap;
-    unsigned char *data = malloc(numColors * 3);
+    unsigned char *data;
 
     cmap = SBUSCMAPPTR(pScrn->pScreen);
     if (!cmap)
         return;
+    data  = malloc(numColors * 3);
     fbcmap.count = 0;
     fbcmap.index = indices[0];
     fbcmap.red = data;
only in patch2:
unchanged:
--- xorg-server-1.12.4.orig/hw/xfree86/os-support/bus/Sbus.c
+++ xorg-server-1.12.4/hw/xfree86/os-support/bus/Sbus.c
@@ -617,8 +617,10 @@
         return 0;
     strcpy(name, pathName);
     name[i + 1] = 0;
-    if (name[0] != '/')
+    if (name[0] != '/') {
+        free(name);
         return 0;
+    }
     p = strchr(name + 1, '/');
     if (p)
         *p = 0;
@@ -629,8 +631,10 @@
         *regstr++ = 0;
     else
         regstr = p;
-    if (name + 1 == regstr)
+    if (name + 1 == regstr) {
+        free(name);
         return 0;
+    }
     promGetSibling(0);
     i = promWalkPathname2Node(name + 1, regstr, promRootNode, 0);
     free(name);

Reply to: