lkml.org 
[lkml]   [2020]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 333/639] scsi: qla2xxx: Avoid that qlt_send_resp_ctio() corrupts memory
    Date
    From: Bart Van Assche <bvanassche@acm.org>

    [ Upstream commit a861b49273578e255426a499842cf7f465456351 ]

    The "(&ctio->u.status1.sense_data)[i]" where i >= 0 expressions in
    qlt_send_resp_ctio() are probably typos and should have been
    "(&ctio->u.status1.sense_data[4 * i])" instead. Instead of only fixing
    these typos, modify the code for storing sense data such that it becomes
    easy to read. This patch fixes a Coverity complaint about accessing an
    array outside its bounds.

    Cc: Himanshu Madhani <hmadhani@marvell.com>
    Cc: Giridhar Malavali <gmalavali@marvell.com>
    Fixes: be25152c0d9e ("qla2xxx: Improve T10-DIF/PI handling in driver.") # v4.11.
    Signed-off-by: Bart Van Assche <bvanassche@acm.org>
    Acked-by: Himanshu Madhani <hmadhani@marvell.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/scsi/qla2xxx/qla_target.c | 12 ++++++------
    1 file changed, 6 insertions(+), 6 deletions(-)

    diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
    index c925ca7875374..95206e227730c 100644
    --- a/drivers/scsi/qla2xxx/qla_target.c
    +++ b/drivers/scsi/qla2xxx/qla_target.c
    @@ -2233,14 +2233,14 @@ void qlt_send_resp_ctio(struct qla_qpair *qpair, struct qla_tgt_cmd *cmd,
    ctio->u.status1.scsi_status |=
    cpu_to_le16(SS_RESIDUAL_UNDER);

    - /* Response code and sense key */
    - put_unaligned_le32(((0x70 << 24) | (sense_key << 8)),
    - (&ctio->u.status1.sense_data)[0]);
    + /* Fixed format sense data. */
    + ctio->u.status1.sense_data[0] = 0x70;
    + ctio->u.status1.sense_data[2] = sense_key;
    /* Additional sense length */
    - put_unaligned_le32(0x0a, (&ctio->u.status1.sense_data)[1]);
    + ctio->u.status1.sense_data[7] = 0xa;
    /* ASC and ASCQ */
    - put_unaligned_le32(((asc << 24) | (ascq << 16)),
    - (&ctio->u.status1.sense_data)[3]);
    + ctio->u.status1.sense_data[12] = asc;
    + ctio->u.status1.sense_data[13] = ascq;

    /* Memory Barrier */
    wmb();
    --
    2.20.1


    \
     
     \ /
      Last update: 2020-01-24 12:18    [W:4.033 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site