diff options
| author | Nikola Pajkovsky <npajkovsky@suse.cz> | 2017-09-13 04:46:17 -0400 |
|---|---|---|
| committer | Martin K. Petersen <martin.petersen@oracle.com> | 2017-09-15 21:46:07 -0400 |
| commit | 4cb433e856bce5974ea035181cc8eb406496dccc (patch) | |
| tree | 8819884b3454c09cea86c46a3097ddd66b781bfb | |
| parent | 5c756065e47dc3e84b00577bd109f0a8e69903d7 (diff) | |
scsi: aacraid: error: testing array offset 'bus' after use
Fix possible indexing array of bound for &aac->hba_map[bus][cid], where
bus and cid boundary check happens later.
Fixes: 0d643ff3c353 ("scsi: aacraid: use aac_tmf_callback for reset fib")
Signed-off-by: Nikola Pajkovsky <npajkovsky@suse.cz>
Reviewed-by: Dave Carroll <david.carroll@microsemi.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
| -rw-r--r-- | drivers/scsi/aacraid/linit.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c index 87cc4a93e637..62beb2596466 100644 --- a/drivers/scsi/aacraid/linit.c +++ b/drivers/scsi/aacraid/linit.c | |||
| @@ -906,12 +906,14 @@ static int aac_eh_dev_reset(struct scsi_cmnd *cmd) | |||
| 906 | 906 | ||
| 907 | bus = aac_logical_to_phys(scmd_channel(cmd)); | 907 | bus = aac_logical_to_phys(scmd_channel(cmd)); |
| 908 | cid = scmd_id(cmd); | 908 | cid = scmd_id(cmd); |
| 909 | info = &aac->hba_map[bus][cid]; | 909 | |
| 910 | if (bus >= AAC_MAX_BUSES || cid >= AAC_MAX_TARGETS || | 910 | if (bus >= AAC_MAX_BUSES || cid >= AAC_MAX_TARGETS) |
| 911 | info->devtype != AAC_DEVTYPE_NATIVE_RAW) | ||
| 912 | return FAILED; | 911 | return FAILED; |
| 913 | 912 | ||
| 914 | if (info->reset_state > 0) | 913 | info = &aac->hba_map[bus][cid]; |
| 914 | |||
| 915 | if (info->devtype != AAC_DEVTYPE_NATIVE_RAW && | ||
| 916 | info->reset_state > 0) | ||
| 915 | return FAILED; | 917 | return FAILED; |
| 916 | 918 | ||
| 917 | pr_err("%s: Host adapter reset request. SCSI hang ?\n", | 919 | pr_err("%s: Host adapter reset request. SCSI hang ?\n", |
| @@ -962,12 +964,14 @@ static int aac_eh_target_reset(struct scsi_cmnd *cmd) | |||
| 962 | 964 | ||
| 963 | bus = aac_logical_to_phys(scmd_channel(cmd)); | 965 | bus = aac_logical_to_phys(scmd_channel(cmd)); |
| 964 | cid = scmd_id(cmd); | 966 | cid = scmd_id(cmd); |
| 965 | info = &aac->hba_map[bus][cid]; | 967 | |
| 966 | if (bus >= AAC_MAX_BUSES || cid >= AAC_MAX_TARGETS || | 968 | if (bus >= AAC_MAX_BUSES || cid >= AAC_MAX_TARGETS) |
| 967 | info->devtype != AAC_DEVTYPE_NATIVE_RAW) | ||
| 968 | return FAILED; | 969 | return FAILED; |
| 969 | 970 | ||
| 970 | if (info->reset_state > 0) | 971 | info = &aac->hba_map[bus][cid]; |
| 972 | |||
| 973 | if (info->devtype != AAC_DEVTYPE_NATIVE_RAW && | ||
| 974 | info->reset_state > 0) | ||
| 971 | return FAILED; | 975 | return FAILED; |
| 972 | 976 | ||
| 973 | pr_err("%s: Host adapter reset request. SCSI hang ?\n", | 977 | pr_err("%s: Host adapter reset request. SCSI hang ?\n", |
