| From db7157d4cfce6edf052452fb1d327d4d11b67f4c Mon Sep 17 00:00:00 2001 |
| From: Joe Lawrence <joe.lawrence@stratus.com> |
| Date: Tue, 26 Aug 2014 17:10:41 -0400 |
| Subject: qla2xxx: Fix shost use-after-free on device removal |
| |
| From: Joe Lawrence <joe.lawrence@stratus.com> |
| |
| commit db7157d4cfce6edf052452fb1d327d4d11b67f4c upstream. |
| |
| Once calling scsi_host_put, be careful to not access qla_hw_data through |
| the Scsi_Host private data (ie, scsi_qla_host base_vha). |
| |
| Fixes: fe1b806f4f71 ("qla2xxx: Refactor shutdown code so some functionality can be reused") |
| Signed-off-by: Joe Lawrence <joe.lawrence@stratus.com> |
| Acked-by: Chad Dupuis <chad.dupuis@qlogic.com> |
| Signed-off-by: Christoph Hellwig <hch@lst.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/scsi/qla2xxx/qla_os.c | 6 ++---- |
| 1 file changed, 2 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/scsi/qla2xxx/qla_os.c |
| +++ b/drivers/scsi/qla2xxx/qla_os.c |
| @@ -3119,10 +3119,8 @@ qla2x00_unmap_iobases(struct qla_hw_data |
| } |
| |
| static void |
| -qla2x00_clear_drv_active(scsi_qla_host_t *vha) |
| +qla2x00_clear_drv_active(struct qla_hw_data *ha) |
| { |
| - struct qla_hw_data *ha = vha->hw; |
| - |
| if (IS_QLA8044(ha)) { |
| qla8044_idc_lock(ha); |
| qla8044_clear_drv_active(ha); |
| @@ -3193,7 +3191,7 @@ qla2x00_remove_one(struct pci_dev *pdev) |
| |
| scsi_host_put(base_vha->host); |
| |
| - qla2x00_clear_drv_active(base_vha); |
| + qla2x00_clear_drv_active(ha); |
| |
| qla2x00_unmap_iobases(ha); |
| |