diff mbox series

[v2,7/8] qla2xxx: klocwork - correct the index of array

Message ID 20230607113843.37185-8-njavali@marvell.com
State New
Headers show
Series [v2,1/8] qla2xxx: klocwork - Array index may go out of bound | expand

Commit Message

Nilesh Javali June 7, 2023, 11:38 a.m. UTC
From: Bikash Hazarika <bhazarika@marvell.com>

Klocwork reported array 'port_dstate_str' of size
10 may use index value(s) 10..15.

Add a fix to correct the index of array.

Cc: stable@vger.kernel.org
Signed-off-by: Bikash Hazarika <bhazarika@marvell.com>
Signed-off-by: Nilesh Javali <njavali@marvell.com>
---
v2:
- Remove the outer parenthesis.

 drivers/scsi/qla2xxx/qla_inline.h | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Himanshu Madhani June 15, 2023, 12:39 a.m. UTC | #1
> On Jun 7, 2023, at 4:38 AM, Nilesh Javali <njavali@marvell.com> wrote:
> 
> From: Bikash Hazarika <bhazarika@marvell.com>
> 
> Klocwork reported array 'port_dstate_str' of size
> 10 may use index value(s) 10..15.
> 
> Add a fix to correct the index of array.
> 
> Cc: stable@vger.kernel.org
> Signed-off-by: Bikash Hazarika <bhazarika@marvell.com>
> Signed-off-by: Nilesh Javali <njavali@marvell.com>
> ---
> v2:
> - Remove the outer parenthesis.
> 
> drivers/scsi/qla2xxx/qla_inline.h | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_inline.h b/drivers/scsi/qla2xxx/qla_inline.h
> index cce6e425c121..946a39504a35 100644
> --- a/drivers/scsi/qla2xxx/qla_inline.h
> +++ b/drivers/scsi/qla2xxx/qla_inline.h
> @@ -109,11 +109,13 @@ qla2x00_set_fcport_disc_state(fc_port_t *fcport, int state)
> {
> int old_val;
> uint8_t shiftbits, mask;
> + uint8_t port_dstate_str_sz;
> 
> /* This will have to change when the max no. of states > 16 */
> shiftbits = 4;
> mask = (1 << shiftbits) - 1;
> 
> + port_dstate_str_sz = sizeof(port_dstate_str) / sizeof(char *);
> fcport->disc_state = state;
> while (1) {
> old_val = atomic_read(&fcport->shadow_disc_state);
> @@ -121,7 +123,8 @@ qla2x00_set_fcport_disc_state(fc_port_t *fcport, int state)
>    old_val, (old_val << shiftbits) | state)) {
> ql_dbg(ql_dbg_disc, fcport->vha, 0x2134,
>    "FCPort %8phC disc_state transition: %s to %s - portid=%06x.\n",
> -    fcport->port_name, port_dstate_str[old_val & mask],
> +    fcport->port_name, (old_val & mask) < port_dstate_str_sz ?
> +    port_dstate_str[old_val & mask] : "Unknown",
>    port_dstate_str[state], fcport->d_id.b24);
> return;
> }
> -- 
> 2.23.1
> 

Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
diff mbox series

Patch

diff --git a/drivers/scsi/qla2xxx/qla_inline.h b/drivers/scsi/qla2xxx/qla_inline.h
index cce6e425c121..946a39504a35 100644
--- a/drivers/scsi/qla2xxx/qla_inline.h
+++ b/drivers/scsi/qla2xxx/qla_inline.h
@@ -109,11 +109,13 @@  qla2x00_set_fcport_disc_state(fc_port_t *fcport, int state)
 {
 	int old_val;
 	uint8_t shiftbits, mask;
+	uint8_t port_dstate_str_sz;
 
 	/* This will have to change when the max no. of states > 16 */
 	shiftbits = 4;
 	mask = (1 << shiftbits) - 1;
 
+	port_dstate_str_sz = sizeof(port_dstate_str) / sizeof(char *);
 	fcport->disc_state = state;
 	while (1) {
 		old_val = atomic_read(&fcport->shadow_disc_state);
@@ -121,7 +123,8 @@  qla2x00_set_fcport_disc_state(fc_port_t *fcport, int state)
 		    old_val, (old_val << shiftbits) | state)) {
 			ql_dbg(ql_dbg_disc, fcport->vha, 0x2134,
 			    "FCPort %8phC disc_state transition: %s to %s - portid=%06x.\n",
-			    fcport->port_name, port_dstate_str[old_val & mask],
+			    fcport->port_name, (old_val & mask) < port_dstate_str_sz ?
+				    port_dstate_str[old_val & mask] : "Unknown",
 			    port_dstate_str[state], fcport->d_id.b24);
 			return;
 		}