scsi: aacraid: fix illegal IO beyond last LBA
[ Upstream commit c86fbe484c
]
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-balsundar.p@microsemi.com
Signed-off-by: Balsundar P <balsundar.p@microsemi.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
5.4-rM2-2.2.x-imx-squashed
parent
2c25b95111
commit
bbe4f5e44a
|
@ -2467,13 +2467,13 @@ static int aac_read(struct scsi_cmnd * scsicmd)
|
||||||
scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
|
scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
|
||||||
SAM_STAT_CHECK_CONDITION;
|
SAM_STAT_CHECK_CONDITION;
|
||||||
set_sense(&dev->fsa_dev[cid].sense_data,
|
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);
|
ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0);
|
||||||
memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
|
memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
|
||||||
min_t(size_t, sizeof(dev->fsa_dev[cid].sense_data),
|
min_t(size_t, sizeof(dev->fsa_dev[cid].sense_data),
|
||||||
SCSI_SENSE_BUFFERSIZE));
|
SCSI_SENSE_BUFFERSIZE));
|
||||||
scsicmd->scsi_done(scsicmd);
|
scsicmd->scsi_done(scsicmd);
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintk((KERN_DEBUG "aac_read[cpu %d]: lba = %llu, t = %ld.\n",
|
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 |
|
scsicmd->result = DID_OK << 16 | COMMAND_COMPLETE << 8 |
|
||||||
SAM_STAT_CHECK_CONDITION;
|
SAM_STAT_CHECK_CONDITION;
|
||||||
set_sense(&dev->fsa_dev[cid].sense_data,
|
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);
|
ASENCODE_INTERNAL_TARGET_FAILURE, 0, 0);
|
||||||
memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
|
memcpy(scsicmd->sense_buffer, &dev->fsa_dev[cid].sense_data,
|
||||||
min_t(size_t, sizeof(dev->fsa_dev[cid].sense_data),
|
min_t(size_t, sizeof(dev->fsa_dev[cid].sense_data),
|
||||||
SCSI_SENSE_BUFFERSIZE));
|
SCSI_SENSE_BUFFERSIZE));
|
||||||
scsicmd->scsi_done(scsicmd);
|
scsicmd->scsi_done(scsicmd);
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dprintk((KERN_DEBUG "aac_write[cpu %d]: lba = %llu, t = %ld.\n",
|
dprintk((KERN_DEBUG "aac_write[cpu %d]: lba = %llu, t = %ld.\n",
|
||||||
|
|
Loading…
Reference in New Issue