Commit 77dd7d7b authored by Dick Kennedy's avatar Dick Kennedy Committed by Martin K. Petersen

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: 372c187b ("scsi: lpfc: Add an internal trace log buffer")
CC: Colin Ian King <colin.king@canonical.com>
Signed-off-by: default avatarDick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: default avatarJames Smart <jsmart2021@gmail.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
Addresses-Coverity: ("Unsigned compared against 0")
parent 17105d95
...@@ -14161,12 +14161,10 @@ void lpfc_dmp_dbg(struct lpfc_hba *phba) ...@@ -14161,12 +14161,10 @@ void lpfc_dmp_dbg(struct lpfc_hba *phba)
if ((start_idx + dbg_cnt) > (DBG_LOG_SZ - 1)) { if ((start_idx + dbg_cnt) > (DBG_LOG_SZ - 1)) {
temp_idx = (start_idx + dbg_cnt) % DBG_LOG_SZ; temp_idx = (start_idx + dbg_cnt) % DBG_LOG_SZ;
} else { } else {
if ((start_idx - dbg_cnt) < 0) { if (start_idx < dbg_cnt)
start_idx = DBG_LOG_SZ - (dbg_cnt - start_idx); start_idx = DBG_LOG_SZ - (dbg_cnt - start_idx);
temp_idx = 0; else
} else {
start_idx -= dbg_cnt; start_idx -= dbg_cnt;
}
} }
} }
dev_info(&phba->pcidev->dev, "start %d end %d cnt %d\n", dev_info(&phba->pcidev->dev, "start %d end %d cnt %d\n",
...@@ -14174,7 +14172,7 @@ void lpfc_dmp_dbg(struct lpfc_hba *phba) ...@@ -14174,7 +14172,7 @@ void lpfc_dmp_dbg(struct lpfc_hba *phba)
for (i = 0; i < dbg_cnt; i++) { for (i = 0; i < dbg_cnt; i++) {
if ((start_idx + i) < DBG_LOG_SZ) 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 else
temp_idx = j++; temp_idx = j++;
rem_nsec = do_div(phba->dbg_log[temp_idx].t_ns, NSEC_PER_SEC); rem_nsec = do_div(phba->dbg_log[temp_idx].t_ns, NSEC_PER_SEC);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment