| From foo@baz Sun Jun 17 12:07:33 CEST 2018 |
| From: Colin Ian King <colin.king@canonical.com> |
| Date: Fri, 20 Apr 2018 10:57:16 +0100 |
| Subject: scsi: isci: Fix infinite loop in while loop |
| |
| From: Colin Ian King <colin.king@canonical.com> |
| |
| [ Upstream commit 4bc83b3f272fe8f36450f9c003df49cf07ffe5fd ] |
| |
| In the case when the phy_mask is bitwise anded with the phy_index bit is |
| zero the continue statement currently jumps to the next iteration of the |
| while loop and phy_index is never actually incremented, potentially |
| causing an infinite loop if phy_index is less than SCI_MAX_PHS. Fix this |
| by turning the while loop into a for loop. |
| |
| Signed-off-by: Colin Ian King <colin.king@canonical.com> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/scsi/isci/port_config.c | 3 +-- |
| 1 file changed, 1 insertion(+), 2 deletions(-) |
| |
| --- a/drivers/scsi/isci/port_config.c |
| +++ b/drivers/scsi/isci/port_config.c |
| @@ -291,7 +291,7 @@ sci_mpc_agent_validate_phy_configuration |
| * Note: We have not moved the current phy_index so we will actually |
| * compare the startting phy with itself. |
| * This is expected and required to add the phy to the port. */ |
| - while (phy_index < SCI_MAX_PHYS) { |
| + for (; phy_index < SCI_MAX_PHYS; phy_index++) { |
| if ((phy_mask & (1 << phy_index)) == 0) |
| continue; |
| sci_phy_get_sas_address(&ihost->phys[phy_index], |
| @@ -311,7 +311,6 @@ sci_mpc_agent_validate_phy_configuration |
| &ihost->phys[phy_index]); |
| |
| assigned_phy_mask |= (1 << phy_index); |
| - phy_index++; |
| } |
| |
| } |