]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] two PNP memory leaks
authorAndrew Morton <akpm@digeo.com>
Sun, 25 May 2003 08:14:47 +0000 (01:14 -0700)
committerLinus Torvalds <torvalds@home.transmeta.com>
Sun, 25 May 2003 08:14:47 +0000 (01:14 -0700)
From: Hollis Blanchard <hollis@austin.ibm.com>

Fix two pnp error-path memory leaks, caught by Stanford memory leak checker
circa 2.5.48.

drivers/pnp/isapnp/core.c
drivers/pnp/quirks.c

index 867b31dc3d00b2c732b56a368881ba2f00e7e19a..938ff30019c347636bd278baed404ac079376f13 100644 (file)
@@ -419,11 +419,12 @@ static void __init isapnp_skip_bytes(int count)
 
 static void isapnp_parse_id(struct pnp_dev * dev, unsigned short vendor, unsigned short device)
 {
-       struct pnp_id * id = isapnp_alloc(sizeof(struct pnp_id));
-       if (!id)
-               return;
+       struct pnp_id * id;
        if (!dev)
                return;
+       id = isapnp_alloc(sizeof(struct pnp_id));
+       if (!id)
+               return;
        sprintf(id->id, "%c%c%c%x%x%x%x",
                        'A' + ((vendor >> 2) & 0x3f) - 1,
                        'A' + (((vendor & 3) << 3) | ((vendor >> 13) & 7)) - 1,
index 659e650caac3a89ab7fbabb50d1ebe650574bbb5..dcb4570cd657a3b15ca59529746a2c7e01e0721c 100644 (file)
@@ -40,9 +40,13 @@ static void quirk_awe32_resources(struct pnp_dev *dev)
         */
        for ( ; res ; res = res->dep ) {
                port2 = pnp_alloc(sizeof(struct pnp_port));
+               if (!port2)
+                       return;
                port3 = pnp_alloc(sizeof(struct pnp_port));
-               if (!port2 || !port3)
+               if (!port3) {
+                       kfree(port2);
                        return;
+               }
                port = res->port;
                memcpy(port2, port, sizeof(struct pnp_port));
                memcpy(port3, port, sizeof(struct pnp_port));