Commit ec16ea56 authored by Luben Tuikov's avatar Luben Tuikov Committed by Greg Kroah-Hartman

libsas: remove expander from dev list on error

commit 5911e963 upstream.

If expander discovery fails (sas_discover_expander()), remove the
expander from the port device list (sas_ex_discover_expander()),
before freeing it. Else the list is corrupted and, e.g., when we
attempt to send SMP commands to other devices, the kernel oopses.
Signed-off-by: default avatarLuben Tuikov <ltuikov@yahoo.com>
Reviewed-by: default avatarJack Wang <jack_wang@usish.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 7f138af8
...@@ -849,6 +849,9 @@ static struct domain_device *sas_ex_discover_expander( ...@@ -849,6 +849,9 @@ static struct domain_device *sas_ex_discover_expander(
res = sas_discover_expander(child); res = sas_discover_expander(child);
if (res) { if (res) {
spin_lock_irq(&parent->port->dev_list_lock);
list_del(&child->dev_list_node);
spin_unlock_irq(&parent->port->dev_list_lock);
kfree(child); kfree(child);
return NULL; return NULL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment