• Benjamin Block's avatar
    scsi: zfcp: Fence early sysfs interfaces for accesses of shost objects · 71159b6e
    Benjamin Block authored
    When setting an adapter online for the first time, we also create a couple
    of entries for it in the sysfs device tree. This is also true even if the
    adapter has not yet ever gone successfully through exchange config and
    exchange port data.
    
    When moving the scsi host object allocation and registration to after the
    first exchange config and exchange port data, this make the `port_rescan`
    attribute susceptible to invalid pointer-dereferences of the shost field
    before the adapter is fully initialized.
    
    When written to, it schedules a `scan_work` item that will in turn make use
    of the associated fibre channel host object to check the topology used for
    this FCP device.
    
    Because scanning for remote ports can't be done successfully without
    completing exchange config and exchange port data first, we can simply
    fence `port_rescan`, and so prevent the illegal access.
    
    As with cases where we can't get a reference to the adapter, we also return
    -ENODEV here. Applications need to handle that errno today already.
    
    After a successful allocation of the scsi host object nothing changes in
    the work flow.
    
    Link: https://lore.kernel.org/r/ef65366d309993ca91b6917727590ca7ca166c8f.1588956679.git.bblock@linux.ibm.comReviewed-by: default avatarSteffen Maier <maier@linux.ibm.com>
    Signed-off-by: default avatarBenjamin Block <bblock@linux.ibm.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    71159b6e
zfcp_sysfs.c 27.8 KB