Skip to contentSkip to conversation

make drivers/scsi/hosts.c check kmalloc return codes (241p9)

PATCH New Rasmus Andersen 1 participant 1 message Jan 22, 2001 SCSI

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 make drivers/scsi/hosts.c check kmalloc return codes (241p9)

Hi.

The following patch makes drivers/scsi/hosts.c check kmalloc's return code, drops some gratitious zero initializations and makes it a little less panicky.

It applies cleanly against ac10 and 241p9.

Please comment.

drivers/scsi/hosts.c +23 -11
@@ -69,7 +69,7 @@
  *  idiocy.
  */
 
-Scsi_Host_Template * scsi_hosts = NULL;
+Scsi_Host_Template * scsi_hosts;
 
 
 /*
@@ -77,12 +77,12 @@
  *      MAX_SCSI_HOSTS here.
  */
 
-Scsi_Host_Name * scsi_host_no_list = NULL;
-struct Scsi_Host * scsi_hostlist = NULL;
-struct Scsi_Device_Template * scsi_devicelist = NULL;
+Scsi_Host_Name * scsi_host_no_list;
+struct Scsi_Host * scsi_hostlist;
+struct Scsi_Device_Template * scsi_devicelist;
 
-int max_scsi_hosts = 0;
-int next_scsi_host = 0;
+int max_scsi_hosts;
+int next_scsi_host;
 
 void
 scsi_unregister(struct Scsi_Host * sh){
@@ -140,10 +140,7 @@
 					 (tpnt->unchecked_isa_dma && j ? 
 					  GFP_DMA : 0) | GFP_ATOMIC);
     if(retval == NULL)
-    {
-        printk("scsi: out of memory in scsi_register.\n");
-    	return NULL;
-    }
+        goto err_out;
     	
     memset(retval, 0, sizeof(struct Scsi_Host) + j);
 
@@ -163,12 +160,19 @@
     atomic_set(&retval->host_active,0);
     retval->host_busy = 0;
     retval->host_failed = 0;
-    if(j > 0xffff) panic("Too many extra bytes requested\n");
+    if(j > 0xffff) {
+            printk("scsi: Too many extra bytes requested\n");
+            goto err_dealloc_retval;
+    }
     retval->extra_bytes = j;
     retval->loaded_as_module = 1;
     if (flag_new) {
 	shn = (Scsi_Host_Name *) kmalloc(sizeof(Scsi_Host_Name), GFP_ATOMIC);
+        if (!shn)
+                goto err_dealloc_retval;
 	shn->name = kmalloc(hname_len + 1, GFP_ATOMIC);
+        if (!shn->name) 
+                goto err_dealloc_shn;
 	if (hname_len > 0)
 	    strncpy(shn->name, hname, hname_len);
 	shn->name[hname_len] = 0;
@@ -258,6 +262,14 @@
     }
     
     return retval;
+
+ err_dealloc_shn:
+    kfree(shn);
+ err_dealloc_retval:
+    kfree(retval);
+ err_out:
+    printk("scsi: out of memory in scsi_register.\n");
+    return NULL;
 }
 
 int
Signature · 9 lines
        Rasmus([email protected])

While the Melissa license is a bit unclear, Melissa aggressively
encourages free distribution of its source code.
  -- Kevin Dalley on Melissa being Open Source
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/