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 |
> 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 --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; }