| From e1ba0b0b44512c5a209526c09ea3eb7d256b6951 Mon Sep 17 00:00:00 2001 |
| From: John Garry <john.garry@huawei.com> |
| Date: Fri, 25 Jan 2019 22:22:38 +0800 |
| Subject: scsi: hisi_sas: Fix to only call scsi_get_prot_op() for non-NULL scsi_cmnd |
| |
| From: John Garry <john.garry@huawei.com> |
| |
| commit e1ba0b0b44512c5a209526c09ea3eb7d256b6951 upstream. |
| |
| A NULL-pointer dereference was introduced for TMF SSP commands from the |
| upstreaming reworking. |
| |
| Fix this by relocating the scsi_get_prot_op() callsite. |
| |
| Fixes: d6a9000b81be ("scsi: hisi_sas: Add support for DIF feature for v2 hw") |
| Signed-off-by: John Garry <john.garry@huawei.com> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c |
| +++ b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c |
| @@ -1033,8 +1033,8 @@ static void prep_ssp_v3_hw(struct hisi_h |
| struct sas_ssp_task *ssp_task = &task->ssp_task; |
| struct scsi_cmnd *scsi_cmnd = ssp_task->cmd; |
| struct hisi_sas_tmf_task *tmf = slot->tmf; |
| - unsigned char prot_op = scsi_get_prot_op(scsi_cmnd); |
| int has_data = 0, priority = !!tmf; |
| + unsigned char prot_op; |
| u8 *buf_cmd; |
| u32 dw1 = 0, dw2 = 0, len = 0; |
| |
| @@ -1049,6 +1049,7 @@ static void prep_ssp_v3_hw(struct hisi_h |
| dw1 |= 2 << CMD_HDR_FRAME_TYPE_OFF; |
| dw1 |= DIR_NO_DATA << CMD_HDR_DIR_OFF; |
| } else { |
| + prot_op = scsi_get_prot_op(scsi_cmnd); |
| dw1 |= 1 << CMD_HDR_FRAME_TYPE_OFF; |
| switch (scsi_cmnd->sc_data_direction) { |
| case DMA_TO_DEVICE: |