From: Balsundar P <balsunda...@microsemi.com>

[ Upstream commit c86fbe484c10b2cd1e770770db2d6b2c88801c1d ]

The driver fails to handle data when read or written beyond device reported
LBA, which triggers kernel panic

Link: 
https://lore.kernel.org/r/1571120524-6037-2-git-send-email-balsunda...@microsemi.com
Signed-off-by: Balsundar P <balsunda...@microsemi.com>
Signed-off-by: Martin K. Petersen <martin.peter...@oracle.com>
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 drivers/scsi/aacraid/aachba.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c
index de33801ca31ea..0614d05a990a6 100644
--- a/drivers/scsi/aacraid/aachba.c
+++ b/drivers/scsi/aacraid/aachba.c
@@ -1938,13 +1938,13 @@ static int aac_read(struct scsi_cmnd * scsicmd)
                scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
                        SAM_STAT_CHECK_CONDITION;
                set_sense(&dev->fsa_dev[cid].sense_data,
-                         HARDWARE_ERROR, SENCODE_INTERNAL_TARGET_FAILURE,
+                         ILLEGAL_REQUEST, SENCODE_LBA_OUT_OF_RANGE,
                          ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0);
                memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
                       min_t(size_t, sizeof(dev->fsa_dev[cid].sense_data),
                             SCSI_SENSE_BUFFERSIZE));
                scsicmd->scsi_done(scsicmd);
-               return 1;
+               return 0;
        }
 
        dprintk((KERN_DEBUG "aac_read[cpu %d]: lba = %llu, t = %ld.\n",
@@ -2035,13 +2035,13 @@ static int aac_write(struct scsi_cmnd * scsicmd)
                scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
                        SAM_STAT_CHECK_CONDITION;
                set_sense(&dev->fsa_dev[cid].sense_data,
-                         HARDWARE_ERROR, SENCODE_INTERNAL_TARGET_FAILURE,
+                         ILLEGAL_REQUEST, SENCODE_LBA_OUT_OF_RANGE,
                          ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0);
                memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
                       min_t(size_t, sizeof(dev->fsa_dev[cid].sense_data),
                             SCSI_SENSE_BUFFERSIZE));
                scsicmd->scsi_done(scsicmd);
-               return 1;
+               return 0;
        }
 
        dprintk((KERN_DEBUG "aac_write[cpu %d]: lba = %llu, t = %ld.\n",
-- 
2.25.1



Reply via email to