Skip to content

Commit

Permalink
scsi: lpfc: Fix less-than-zero comparison of unsigned value
Browse files Browse the repository at this point in the history
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: 372c187 ("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")
  • Loading branch information
Dick Kennedy authored and Martin K. Petersen committed Jul 8, 2020
1 parent 17105d9 commit 77dd7d7
Showing 1 changed file with 3 additions and 5 deletions.
8 changes: 3 additions & 5 deletions drivers/scsi/lpfc/lpfc_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -14161,20 +14161,18 @@ 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",
start_idx, temp_idx, dbg_cnt);

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);
Expand Down

0 comments on commit 77dd7d7

Please sign in to comment.