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@xxxxxxxxxx>. The second problem was mentioned and fixed by Jeff Garzik <jgarzik@xxxxxxxxx> in a larger cleanup patch. Cc: Dave Jones <davej@xxxxxxxxxx> Cc: Jeff Garzik <jgarzik@xxxxxxxxx> Signed-off-by: Tejun Heo <htejun@xxxxxxxxx> --- drivers/scsi/libata-core.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) 77f3f879387cc5fce6c7a4ca7777c586fe6291cd diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c index 509b048..16fc2dd 100644 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c @@ -5511,10 +5511,10 @@ int ata_device_add(const struct ata_prob 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); -- 1.3.2 - : send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html