diff options
author | Tejun Heo <htejun@gmail.com> | 2006-08-05 03:59:19 +0900 |
---|---|---|
committer | Tejun Heo <htejun@gmail.com> | 2006-08-05 03:59:19 +0900 |
commit | 77f3f879387cc5fce6c7a4ca7777c586fe6291cd (patch) | |
tree | 86cdb66936984d02bd1da3a84deec72fd805400d /drivers/scsi | |
parent | 6543bc0777fadf129d8ee7ac82e0090fb0480403 (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>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/libata-core.c | 8 |
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); |