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

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

Signed-off-by: Balsundar P <balsunda...@microsemi.com>
---
 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 0ed3f806ace5..2388143d59f5 100644
--- a/drivers/scsi/aacraid/aachba.c
+++ b/drivers/scsi/aacraid/aachba.c
@@ -2467,13 +2467,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",
@@ -2559,13 +2559,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.18.1

Reply via email to