summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTejun Heo <htejun@gmail.com>2006-08-05 03:59:19 +0900
committerTejun Heo <htejun@gmail.com>2006-08-05 03:59:19 +0900
commit77f3f879387cc5fce6c7a4ca7777c586fe6291cd (patch)
tree86cdb66936984d02bd1da3a84deec72fd805400d
parent6543bc0777fadf129d8ee7ac82e0090fb0480403 (diff)
[PATCH] libata: fix ata_device_add() error path
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>
-rw-r--r--drivers/scsi/libata-core.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
index 509b04889983..16fc2dd8f2f7 100644
--- a/drivers/scsi/libata-core.c
+++ b/drivers/scsi/libata-core.c
@@ -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);