* [PATCH] scsi/sr.c resource alloc checking [not found] <20001209151425.E859@conectiva.com.br> @ 2000-12-09 19:40 ` Arnaldo Carvalho de Melo 2000-12-09 19:49 ` [PATCH] drivers/net/sbni.c irq release on failure Arnaldo Carvalho de Melo 0 siblings, 1 reply; 4+ messages in thread From: Arnaldo Carvalho de Melo @ 2000-12-09 19:40 UTC (permalink / raw) To: Alan Cox; +Cc: Jens Axboe, linux-kernel Alan/Jens, Please consider applying, a similar patch is already in 2.4. In sr_init we don't need zeroing the data allocated with scsi_init_malloc, as scsi_init_malloc already does this for us. - Arnaldo --- linux-2.2.18-pre25/drivers/scsi/sr.c Sat Dec 9 15:08:24 2000 +++ linux-2.2.18-pre25.acme/drivers/scsi/sr.c Sat Dec 9 17:33:54 2000 @@ -26,6 +26,8 @@ * Modified by Jens Axboe <axboe@suse.de> - support DVD-RAM * transparently and loose the GHOST hack * + * Modified by Arnaldo Carvalho de Melo <acme@conectiva.com.br> + * check resource allocation in sr_init and some cleanups - 2000/12/09 */ #include <linux/module.h> @@ -70,10 +72,10 @@ sr_finish, sr_attach, sr_detach }; -Scsi_CD *scsi_CDs = NULL; -static int *sr_sizes = NULL; +Scsi_CD *scsi_CDs; +static int *sr_sizes; -static int *sr_blocksizes = NULL; +static int *sr_blocksizes; static int sr_open(struct cdrom_device_info *, int); void get_sectorsize(int); @@ -1113,16 +1115,21 @@ } if (scsi_CDs) return 0; - sr_template.dev_max = - sr_template.dev_noticed + SR_EXTRA_DEVS; - scsi_CDs = (Scsi_CD *) scsi_init_malloc(sr_template.dev_max * sizeof(Scsi_CD), GFP_ATOMIC); - memset(scsi_CDs, 0, sr_template.dev_max * sizeof(Scsi_CD)); - - sr_sizes = (int *) scsi_init_malloc(sr_template.dev_max * sizeof(int), GFP_ATOMIC); - memset(sr_sizes, 0, sr_template.dev_max * sizeof(int)); - - sr_blocksizes = (int *) scsi_init_malloc(sr_template.dev_max * - sizeof(int), GFP_ATOMIC); + sr_template.dev_max = sr_template.dev_noticed + SR_EXTRA_DEVS; + scsi_CDs = scsi_init_malloc(sr_template.dev_max * sizeof(Scsi_CD), + GFP_ATOMIC); + if (!scsi_CDs) + goto cleanup_register; + + sr_sizes = scsi_init_malloc(sr_template.dev_max * sizeof(int), + GFP_ATOMIC); + if (!sr_sizes) + goto cleanup_cds; + + sr_blocksizes = scsi_init_malloc(sr_template.dev_max * sizeof(int), + GFP_ATOMIC); + if (!sr_blocksizes) + goto cleanup_sizes; /* * These are good guesses for the time being. @@ -1131,6 +1138,18 @@ sr_blocksizes[i] = 2048; blksize_size[MAJOR_NR] = sr_blocksizes; return 0; +cleanup_sizes: + scsi_init_free((char *) sr_sizes, sr_template.dev_max * sizeof(int)); + sr_sizes = NULL; +cleanup_cds: + scsi_init_free((char *) scsi_CDs, + (sr_template.dev_noticed + SR_EXTRA_DEVS) * + sizeof(Scsi_CD)); + scsi_CDs = NULL; +cleanup_register: + unregister_blkdev(MAJOR_NR, "sr"); + sr_registered--; + return 1; } void sr_finish() @@ -1241,7 +1260,7 @@ scsi_init_free((char *) scsi_CDs, (sr_template.dev_noticed + SR_EXTRA_DEVS) * sizeof(Scsi_CD)); - + scsi_CDs = NULL; scsi_init_free((char *) sr_sizes, sr_template.dev_max * sizeof(int)); sr_sizes = NULL; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] drivers/net/sbni.c irq release on failure 2000-12-09 19:40 ` [PATCH] scsi/sr.c resource alloc checking Arnaldo Carvalho de Melo @ 2000-12-09 19:49 ` Arnaldo Carvalho de Melo 2000-12-09 20:03 ` [PATCH] 2.2: drivers/scsi/3c-xxxx.c resource " Arnaldo Carvalho de Melo 2000-12-10 8:59 ` [PATCH] drivers/net/sbni.c irq " Yaroslav S. Polyakov 0 siblings, 2 replies; 4+ messages in thread From: Arnaldo Carvalho de Melo @ 2000-12-09 19:49 UTC (permalink / raw) To: Alan Cox, Yaroslav Polyakov; +Cc: linux-kernel Alan/Yaroslav, Please consider applying, a similar patch is already in 2.4. - Arnaldo --- linux-2.2.18-pre25/drivers/net/sbni.c Sat Dec 9 15:08:17 2000 +++ linux-2.2.18-pre25.acme/drivers/net/sbni.c Sat Dec 9 17:44:53 2000 @@ -456,6 +456,7 @@ if(dev->priv == NULL) { DP( printk("%s: cannot allocate memory\n", dev->name); ) + free_irq(dev->irq, dev); return -ENOMEM; } - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] 2.2: drivers/scsi/3c-xxxx.c resource release on failure 2000-12-09 19:49 ` [PATCH] drivers/net/sbni.c irq release on failure Arnaldo Carvalho de Melo @ 2000-12-09 20:03 ` Arnaldo Carvalho de Melo 2000-12-10 8:59 ` [PATCH] drivers/net/sbni.c irq " Yaroslav S. Polyakov 1 sibling, 0 replies; 4+ messages in thread From: Arnaldo Carvalho de Melo @ 2000-12-09 20:03 UTC (permalink / raw) To: Alan Cox, Adam Radford; +Cc: linux-kernel Alan/Adam, Please consider applying, a similar patch is already in 2.4. - Arnaldo --- linux-2.2.18-pre25/drivers/scsi/3w-xxxx.c Tue Sep 5 19:13:35 2000 +++ linux-2.2.18-pre25.acme/drivers/scsi/3w-xxxx.c Sat Dec 9 17:59:22 2000 @@ -3,6 +3,8 @@ Written By: Adam Radford <linux@3ware.com> Modifications By: Joel Jacobson <linux@3ware.com> + Arnaldo Carvalho de Melo <acme@conectiva.com.br> + Copyright (C) 1999-2000 3ware Inc. @@ -64,6 +66,8 @@ Bug fix so hot spare drives don't show up. 1.02.00.002 - Fix bug with tw_setfeature() call that caused oops on some systems. + 12/09/2000 - release previously allocated resources on failure at + tw_allocate_memory (acme) */ #include <linux/module.h> @@ -416,37 +420,29 @@ /* This function will allocate memory and check if it is 16 d-word aligned */ int tw_allocate_memory(TW_Device_Extension *tw_dev, int request_id, int size, int which) { - u32 *virt_addr; + u32 *virt_addr = kmalloc(size, GFP_ATOMIC); dprintk(KERN_NOTICE "3w-xxxx: tw_allocate_memory()\n"); + if (!virt_addr) { + printk(KERN_WARNING "3w-xxxx: tw_allocate_memory(): kmalloc() failed.\n"); + return 1; + } + + if ((u32)virt_addr % TW_ALIGNMENT) { + kfree(virt_addr); + printk(KERN_WARNING "3w-xxxx: tw_allocate_memory(): Found unaligned address.\n"); + return 1; + } + if (which == 0) { - /* Allocate command packet memory */ - virt_addr = kmalloc(size, GFP_ATOMIC); - if (virt_addr == NULL) { - printk(KERN_WARNING "3w-xxxx: tw_allocate_memory(): kmalloc() failed.\n"); - return 1; - } - if ((u32)virt_addr % TW_ALIGNMENT) { - printk(KERN_WARNING "3w-xxxx: tw_allocate_memory(): Found unaligned address.\n"); - return 1; - } tw_dev->command_packet_virtual_address[request_id] = virt_addr; tw_dev->command_packet_physical_address[request_id] = - virt_to_bus(virt_addr); + virt_to_bus(virt_addr); } else { - /* Allocate generic buffer */ - virt_addr = kmalloc(size, GFP_ATOMIC); - if (virt_addr == NULL) { - printk(KERN_WARNING "3w-xxxx: tw_allocate_memory(): kmalloc() failed.\n"); - return 1; - } - if ((u32)virt_addr % TW_ALIGNMENT) { - printk(KERN_WARNING "3w-xxxx: tw_allocate_memory(): Found unaligned address.\n"); - return 1; - } tw_dev->alignment_virtual_address[request_id] = virt_addr; - tw_dev->alignment_physical_address[request_id] = virt_to_bus(virt_addr); + tw_dev->alignment_physical_address[request_id] = + virt_to_bus(virt_addr); } return 0; } /* End tw_allocate_memory() */ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] drivers/net/sbni.c irq release on failure 2000-12-09 19:49 ` [PATCH] drivers/net/sbni.c irq release on failure Arnaldo Carvalho de Melo 2000-12-09 20:03 ` [PATCH] 2.2: drivers/scsi/3c-xxxx.c resource " Arnaldo Carvalho de Melo @ 2000-12-10 8:59 ` Yaroslav S. Polyakov 1 sibling, 0 replies; 4+ messages in thread From: Yaroslav S. Polyakov @ 2000-12-10 8:59 UTC (permalink / raw) To: Arnaldo Carvalho de Melo; +Cc: Alan Cox, Yaroslav Polyakov, linux-kernel Hi! On Sat, 9 Dec 2000, Arnaldo Carvalho de Melo wrote: > Alan/Yaroslav, > > Please consider applying, a similar patch is already in 2.4. I want to release new version of sbni driver soon (after QA procedures). This new version will be ported to 2.4 kernel. this version already have your patch applied. Thanks! :) > - Arnaldo > > --- linux-2.2.18-pre25/drivers/net/sbni.c Sat Dec 9 15:08:17 2000 > +++ linux-2.2.18-pre25.acme/drivers/net/sbni.c Sat Dec 9 17:44:53 2000 > @@ -456,6 +456,7 @@ > if(dev->priv == NULL) > { > DP( printk("%s: cannot allocate memory\n", dev->name); ) > + free_irq(dev->irq, dev); > return -ENOMEM; > } > > . Si vis pacem, para bellum Granch ltd. Security Analyst - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2000-12-10 10:11 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20001209151425.E859@conectiva.com.br>
2000-12-09 19:40 ` [PATCH] scsi/sr.c resource alloc checking Arnaldo Carvalho de Melo
2000-12-09 19:49 ` [PATCH] drivers/net/sbni.c irq release on failure Arnaldo Carvalho de Melo
2000-12-09 20:03 ` [PATCH] 2.2: drivers/scsi/3c-xxxx.c resource " Arnaldo Carvalho de Melo
2000-12-10 8:59 ` [PATCH] drivers/net/sbni.c irq " Yaroslav S. Polyakov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox