]> git.hungrycats.org Git - linux/commitdiff
[PATCH] Fix error path in AD1889 driver
authorFrançois Romieu <romieu@fr.zoreil.com>
Sat, 12 Jul 2003 07:17:15 +0000 (00:17 -0700)
committerLinus Torvalds <torvalds@home.osdl.org>
Sat, 12 Jul 2003 07:17:15 +0000 (00:17 -0700)
Memory leak fix: the allocated areas weren't referenced any more once the
original error path returned.

sound/oss/ad1889.c

index a55ade032da647a043a0b7b3793d277d70d83a59..08aa241cd41d19bf2d67383a5cc2d9418c286ab6 100644 (file)
@@ -236,16 +236,23 @@ static ad1889_dev_t *ad1889_alloc_dev(struct pci_dev *pci)
 
        for (i = 0; i < AD_MAX_STATES; i++) {
                dmabuf = &dev->state[i].dmabuf;
-               if ((dmabuf->rawbuf = kmalloc(DMA_SIZE, GFP_KERNEL|GFP_DMA)) == NULL)
-                       return NULL;
+               dmabuf->rawbuf = kmalloc(DMA_SIZE, GFP_KERNEL|GFP_DMA);
+               if (!dmabuf->rawbuf)
+                       goto err_free_dmabuf;
                dmabuf->rawbuf_size = DMA_SIZE;
                dmabuf->dma_handle = 0;
                dmabuf->rd_ptr = dmabuf->wr_ptr = dmabuf->dma_len = 0UL;
                dmabuf->ready = 0;
                dmabuf->rate = 44100;
        }
-
+out:
        return dev;
+
+err_free_dmabuf:
+       while (--i >= 0)
+               kfree(dev->state[i].dmabuf.rawbuf);
+       kfree(dev);
+       return NULL;
 }
 
 static void ad1889_free_dev(ad1889_dev_t *dev)