• Yang Yingliang's avatar
    scsi: mpt3sas: Fix possible resource leaks in mpt3sas_transport_port_add() · 78316e9d
    Yang Yingliang authored
    In mpt3sas_transport_port_add(), if sas_rphy_add() returns error,
    sas_rphy_free() needs be called to free the resource allocated in
    sas_end_device_alloc(). Otherwise a kernel crash will happen:
    
    Unable to handle kernel NULL pointer dereference at virtual address 0000000000000108
    CPU: 45 PID: 37020 Comm: bash Kdump: loaded Tainted: G        W          6.1.0-rc1+ #189
    pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
    pc : device_del+0x54/0x3d0
    lr : device_del+0x37c/0x3d0
    Call trace:
     device_del+0x54/0x3d0
     attribute_container_class_device_del+0x28/0x38
     transport_remove_classdev+0x6c/0x80
     attribute_container_device_trigger+0x108/0x110
     transport_remove_device+0x28/0x38
     sas_rphy_remove+0x50/0x78 [scsi_transport_sas]
     sas_port_delete+0x30/0x148 [scsi_transport_sas]
     do_sas_phy_delete+0x78/0x80 [scsi_transport_sas]
     device_for_each_child+0x68/0xb0
     sas_remove_children+0x30/0x50 [scsi_transport_sas]
     sas_rphy_remove+0x38/0x78 [scsi_transport_sas]
     sas_port_delete+0x30/0x148 [scsi_transport_sas]
     do_sas_phy_delete+0x78/0x80 [scsi_transport_sas]
     device_for_each_child+0x68/0xb0
     sas_remove_children+0x30/0x50 [scsi_transport_sas]
     sas_remove_host+0x20/0x38 [scsi_transport_sas]
     scsih_remove+0xd8/0x420 [mpt3sas]
    
    Because transport_add_device() is not called when sas_rphy_add() fails, the
    device is not added. When sas_rphy_remove() is subsequently called to
    remove the device in the remove() path, a NULL pointer dereference happens.
    
    Fixes: f92363d1 ("[SCSI] mpt3sas: add new driver supporting 12GB SAS")
    Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
    Link: https://lore.kernel.org/r/20221109032403.1636422-1-yangyingliang@huawei.comSigned-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    78316e9d
mpt3sas_transport.c 63.6 KB