[PATCH] s390: dasd proc entries
authorHorst Hummel <horst.hummel@de.ibm.com>
Tue, 11 Apr 2006 05:53:48 +0000 (22:53 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Tue, 11 Apr 2006 13:18:38 +0000 (06:18 -0700)
The proc_mkdir calls in the dasd driver are not check for NULL pointers.  Add
code to check the pointers and bail out if one of the proc entries could not
be created.

Signed-off-by: Horst Hummel <horst.hummel@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/s390/block/dasd_proc.c

index 1aa3c261718a6813f34105e42db85ce7c054513f..ad23aede356c63254f8aa215284425fd71b51a54 100644 (file)
@@ -294,23 +294,40 @@ out_error:
 #endif                         /* CONFIG_DASD_PROFILE */
 }
 
+/*
+ * Create dasd proc-fs entries.
+ * In case creation failed, cleanup and return -ENOENT.
+ */
 int
 dasd_proc_init(void)
 {
        dasd_proc_root_entry = proc_mkdir("dasd", &proc_root);
+       if (!dasd_proc_root_entry)
+               goto out_nodasd;
        dasd_proc_root_entry->owner = THIS_MODULE;
        dasd_devices_entry = create_proc_entry("devices",
                                               S_IFREG | S_IRUGO | S_IWUSR,
                                               dasd_proc_root_entry);
+       if (!dasd_devices_entry)
+               goto out_nodevices;
        dasd_devices_entry->proc_fops = &dasd_devices_file_ops;
        dasd_devices_entry->owner = THIS_MODULE;
        dasd_statistics_entry = create_proc_entry("statistics",
                                                  S_IFREG | S_IRUGO | S_IWUSR,
                                                  dasd_proc_root_entry);
+       if (!dasd_statistics_entry)
+               goto out_nostatistics;
        dasd_statistics_entry->read_proc = dasd_statistics_read;
        dasd_statistics_entry->write_proc = dasd_statistics_write;
        dasd_statistics_entry->owner = THIS_MODULE;
        return 0;
+
+ out_nostatistics:
+       remove_proc_entry("devices", dasd_proc_root_entry);
+ out_nodevices:
+       remove_proc_entry("dasd", &proc_root);
+ out_nodasd:
+       return -ENOENT;
 }
 
 void