|
|
@@ -3805,8 +3805,13 @@ static unsigned int ata_scsi_zbc_out_xlat(struct ata_queued_cmd *qc)
|
|
|
*/
|
|
|
goto invalid_param_len;
|
|
|
}
|
|
|
- if (block > dev->n_sectors)
|
|
|
- goto out_of_range;
|
|
|
+ if (block >= dev->n_sectors) {
|
|
|
+ /*
|
|
|
+ * Block must be a valid zone ID (a zone start LBA).
|
|
|
+ */
|
|
|
+ fp = 2;
|
|
|
+ goto invalid_fld;
|
|
|
+ }
|
|
|
|
|
|
all = cdb[14] & 0x1;
|
|
|
|
|
|
@@ -3837,10 +3842,6 @@ static unsigned int ata_scsi_zbc_out_xlat(struct ata_queued_cmd *qc)
|
|
|
invalid_fld:
|
|
|
ata_scsi_set_invalid_field(qc->dev, scmd, fp, 0xff);
|
|
|
return 1;
|
|
|
- out_of_range:
|
|
|
- /* "Logical Block Address out of range" */
|
|
|
- ata_scsi_set_sense(qc->dev, scmd, ILLEGAL_REQUEST, 0x21, 0x00);
|
|
|
- return 1;
|
|
|
invalid_param_len:
|
|
|
/* "Parameter list length error" */
|
|
|
ata_scsi_set_sense(qc->dev, scmd, ILLEGAL_REQUEST, 0x1a, 0x0);
|