[SCSI] libsas: fix sas_get_port_device regression
Commit 899fcf4
"[SCSI] libsas: set attached device type and target
protocols for local phys" setup 'phy' to be dereferenced after
list_for_each_entry(phy, &port->phy_list, port_phy_el) (i.e. phy ==
&port->phy_list) resulting in reports like:
BUG: unable to handle kernel NULL pointer dereference at 00000000000002b0
IP: [<ffffffffa00ce948>] sas_discover_domain+0x29e/0x4fb [libsas]
...fix by deferring sas_phy_set_target() to the end of
sas_get_port_device().
Reported-by: Tom Jackson <thomas.p.jackson@intel.com>
Tested-by: Tom Jackson <thomas.p.jackson@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
1699490db3
commit
ec236e5267
1 changed files with 5 additions and 4 deletions
|
@ -134,10 +134,6 @@ static int sas_get_port_device(struct asd_sas_port *port)
|
|||
return -ENODEV;
|
||||
}
|
||||
|
||||
spin_lock_irq(&port->phy_list_lock);
|
||||
list_for_each_entry(phy, &port->phy_list, port_phy_el)
|
||||
sas_phy_set_target(phy, dev);
|
||||
spin_unlock_irq(&port->phy_list_lock);
|
||||
rphy->identify.phy_identifier = phy->phy->identify.phy_identifier;
|
||||
memcpy(dev->sas_addr, port->attached_sas_addr, SAS_ADDR_SIZE);
|
||||
sas_fill_in_rphy(dev, rphy);
|
||||
|
@ -164,6 +160,11 @@ static int sas_get_port_device(struct asd_sas_port *port)
|
|||
spin_unlock_irq(&port->dev_list_lock);
|
||||
}
|
||||
|
||||
spin_lock_irq(&port->phy_list_lock);
|
||||
list_for_each_entry(phy, &port->phy_list, port_phy_el)
|
||||
sas_phy_set_target(phy, dev);
|
||||
spin_unlock_irq(&port->phy_list_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue