[SCSI] fix /proc memory leak in the SCSI core
authorAlan Stern <stern@rowland.harvard.edu>
Fri, 27 Feb 2009 21:51:42 +0000 (16:51 -0500)
committerJames Bottomley <James.Bottomley@HansenPartnership.com>
Thu, 12 Mar 2009 17:58:17 +0000 (12:58 -0500)
The SCSI core calls scsi_proc_hostdir_add() from within
scsi_host_alloc(), but the corresponding scsi_proc_hostdir_rm()
routine is called from within scsi_remove_host().  As a result, if a
host is allocated and then deallocated without ever being registered,
the host's directory in /proc is leaked.

This patch (as1181b) fixes this bug in the SCSI core by moving
scsi_proc_hostdir_rm() into scsi_host_dev_release().

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
drivers/scsi/hosts.c

index aa670a1d1513dcb17bb802796da356ba5a42cfcd..89d41a424b33a0ede3fa3004e00cdf594a722819 100644 (file)
@@ -176,7 +176,6 @@ void scsi_remove_host(struct Scsi_Host *shost)
        transport_unregister_device(&shost->shost_gendev);
        device_unregister(&shost->shost_dev);
        device_del(&shost->shost_gendev);
-       scsi_proc_hostdir_rm(shost->hostt);
 }
 EXPORT_SYMBOL(scsi_remove_host);
 
@@ -270,6 +269,8 @@ static void scsi_host_dev_release(struct device *dev)
        struct Scsi_Host *shost = dev_to_shost(dev);
        struct device *parent = dev->parent;
 
+       scsi_proc_hostdir_rm(shost->hostt);
+
        if (shost->ehandler)
                kthread_stop(shost->ehandler);
        if (shost->work_q)