[PATCH] libata: fix ata_device_add() error path
authorTejun Heo <htejun@gmail.com>
Fri, 4 Aug 2006 18:59:19 +0000 (03:59 +0900)
committerTejun Heo <htejun@gmail.com>
Fri, 4 Aug 2006 18:59:19 +0000 (03:59 +0900)
In the error path, ata_device_add()

* dereferences null host_set->ports[] element.
* calls scsi_remove_host() on not-yet-added shost.

This patch fixes both bugs.  The first problem was spotted and initial
patch submitted by Dave Jones <davej@redhat.com>.  The second problem
was mentioned and fixed by Jeff Garzik <jgarzik@pobox.com> in a larger
cleanup patch.

Cc: Dave Jones <davej@redhat.com>
Cc: Jeff Garzik <jgarzik@pobox.com>
Signed-off-by: Tejun Heo <htejun@gmail.com>
drivers/scsi/libata-core.c

index 509b04889983a564f7a27373e876a37c0905f236..16fc2dd8f2f7e3e7c17149c1764a153eea2c062a 100644 (file)
@@ -5511,10 +5511,10 @@ int ata_device_add(const struct ata_probe_ent *ent)
 err_out:
        for (i = 0; i < count; i++) {
                struct ata_port *ap = host_set->ports[i];
-
-               scsi_remove_host(ap->host);
-               ap->ops->port_stop(ap);
-               scsi_host_put(ap->host);
+               if (ap) {
+                       ap->ops->port_stop(ap);
+                       scsi_host_put(ap->host);
+               }
        }
 err_free_ret:
        kfree(host_set);