summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDick Kennedy <dick.kennedy@broadcom.com>2020-07-06 13:42:46 -0700
committerMartin K. Petersen <martin.petersen@oracle.com>2020-07-08 01:28:49 -0400
commit77dd7d7b344283a3bce334d0f43fc2c0629ffe48 (patch)
tree44169cd8b12ab1af9f658b775cf9619a4584b690
parent17105d959b268ce181d877d9ff2ead5b112ce4a4 (diff)
scsi: lpfc: Fix less-than-zero comparison of unsigned value
The expression start_idx - dbg_cnt is evaluated using unsigned int arthithmetic (since these variables are unsigned ints) and hence can never be less than zero, so the less than comparison is never true. Rewrite the expression to check for start_idx being less than dbg_cnt. After the logic was corrected, temp_idx wasn't working correctly. So fix it as well. Link: https://lore.kernel.org/r/20200706204246.130416-1-jsmart2021@gmail.com Fixes: 372c187b8a70 ("scsi: lpfc: Add an internal trace log buffer") CC: Colin Ian King <colin.king@canonical.com> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com> Signed-off-by: James Smart <jsmart2021@gmail.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Addresses-Coverity: ("Unsigned compared against 0")
-rw-r--r--drivers/scsi/lpfc/lpfc_init.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index 4ba8202d391b..f3656bdcb582 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -14161,12 +14161,10 @@ void lpfc_dmp_dbg(struct lpfc_hba *phba)
if ((start_idx + dbg_cnt) > (DBG_LOG_SZ - 1)) {
temp_idx = (start_idx + dbg_cnt) % DBG_LOG_SZ;
} else {
- if ((start_idx - dbg_cnt) < 0) {
+ if (start_idx < dbg_cnt)
start_idx = DBG_LOG_SZ - (dbg_cnt - start_idx);
- temp_idx = 0;
- } else {
+ else
start_idx -= dbg_cnt;
- }
}
}
dev_info(&phba->pcidev->dev, "start %d end %d cnt %d\n",
@@ -14174,7 +14172,7 @@ void lpfc_dmp_dbg(struct lpfc_hba *phba)
for (i = 0; i < dbg_cnt; i++) {
if ((start_idx + i) < DBG_LOG_SZ)
- temp_idx = (start_idx + i) % (DBG_LOG_SZ - 1);
+ temp_idx = (start_idx + i) % DBG_LOG_SZ;
else
temp_idx = j++;
rem_nsec = do_div(phba->dbg_log[temp_idx].t_ns, NSEC_PER_SEC);