Message ID | 20221017171147.3300575-1-khazhy@google.com |
---|---|
State | New |
Headers | show |
Series | scsi: fix crash in scsi_remove_host after alloc failure | expand |
diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c index c95177ca6ed2..722ab042fbd7 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c @@ -1599,7 +1599,11 @@ EXPORT_SYMBOL(scsi_register_interface); **/ int scsi_sysfs_add_host(struct Scsi_Host *shost) { - transport_register_device(&shost->shost_gendev); + int err; + + err = transport_register_device(&shost->shost_gendev); + if (err) + return err; transport_configure_device(&shost->shost_gendev); return 0; }
If transport_register_device returns error, shost_gendev has already been cleaned up - however since we ignore the error device setup continues happily. We will eventually call transport_unregister_device, attempting to delete shost_gendev again, resulting in a crash. It looks like when this cleanup behavior was added, iscsi was updated, but scsi was missed. Fixes: cd7ea70bb00a ("scsi: drivers: base: Propagate errors through the transport component") Signed-off-by: Khazhismel Kumykov <khazhy@google.com> --- drivers/scsi/scsi_sysfs.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)