[PATCH] fix cosa.c resource allocation

From: Arnaldo Carvalho de Melo (acme@conectiva.com.br)
Date: Fri Aug 11 2000 - 12:15:31 EST


Hi,

    Please take a look and consider applying.

- Arnaldo

--- linux-2.4.0-test6/drivers/net/wan/cosa.c Thu Jul 13 01:58:43 2000
+++ linux-2.4.0-test6.acme/drivers/net/wan/cosa.c Fri Aug 11 14:11:00 2000
@@ -75,6 +75,8 @@
 /*
  * 5/25/1999 : Marcelo Tosatti <marcelo@conectiva.com.br>
  * fixed a deadlock in cosa_sppp_open
+ * 8/11/2000 : Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * check resource allocation on cosa_probe
  */
 
 /* ---------- Headers, macros, data structures ---------- */
@@ -551,20 +553,23 @@
         request_region(base, is_8bit(cosa)?2:4, cosa->type);
         if (request_irq(cosa->irq, cosa_interrupt, 0, cosa->type, cosa))
                 goto bad1;
- if (request_dma(cosa->dma, cosa->type)) {
- free_irq(cosa->irq, cosa);
-bad1: release_region(cosa->datareg,is_8bit(cosa)?2:4);
- printk(KERN_NOTICE "cosa%d: allocating resources failed\n",
- cosa->num);
- return -1;
- }
+ if (request_dma(cosa->dma, cosa->type))
+ goto bad2;
         
         cosa->bouncebuf = kmalloc(COSA_MTU, GFP_KERNEL|GFP_DMA);
+
+ if (!cosa->bouncebuf)
+ goto bad3;
+
         sprintf(cosa->name, "cosa%d", cosa->num);
 
         /* Initialize the per-channel data */
         cosa->chan = kmalloc(sizeof(struct channel_data)*cosa->nchannels,
                 GFP_KERNEL);
+
+ if (!cosa->chan)
+ goto bad4:
+
         memset(cosa->chan, 0, sizeof(struct channel_data)*cosa->nchannels);
         for (i=0; i<cosa->nchannels; i++) {
                 cosa->chan[i].cosa = cosa;
@@ -577,6 +582,13 @@
                 cosa->datareg, cosa->irq, cosa->dma, cosa->nchannels);
 
         return nr_cards++;
+
+bad4: kfree(cosa->bouncebuf);
+bad3: free_dma(cosa->dma);
+bad2: free_irq(cosa->irq, cosa);
+bad1: release_region(cosa->datareg,is_8bit(cosa)?2:4);
+ printk(KERN_NOTICE "cosa%d: allocating resources failed\n", cosa->num);
+ return -1;
 }
 
 

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Tue Aug 15 2000 - 21:00:24 EST