ahci: handle partial inquiry requests.
* it seems 36 bytes is the length of a short inquiry request, so use that. * also remove a data_length check on SCSI_DIR_IN, a zero value is actually allowed. Change-Id: I6618f59626c2540d95b5a8b900d758ec65b11b24 Reviewed-on: https://review.haiku-os.org/c/1487 Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
This commit is contained in:
parent
88e34b3b3d
commit
ec1d063cdd
@ -44,6 +44,9 @@
|
||||
#define RWTRACE(a...)
|
||||
|
||||
|
||||
#define INQUIRY_BASE_LENGTH 36
|
||||
|
||||
|
||||
AHCIPort::AHCIPort(AHCIController* controller, int index)
|
||||
:
|
||||
fController(controller),
|
||||
@ -659,8 +662,8 @@ AHCIPort::ScsiInquiry(scsi_ccb* request)
|
||||
// TODO: Sense ILLEGAL REQUEST + INVALID FIELD IN CDB?
|
||||
gSCSI->finished(request, 1);
|
||||
return;
|
||||
} else if (request->data_length < sizeof(scsiData)) {
|
||||
ERROR("invalid request\n");
|
||||
} else if (request->data_length < INQUIRY_BASE_LENGTH) {
|
||||
ERROR("invalid request %" B_PRIu32 "\n", request->data_length);
|
||||
request->subsys_status = SCSI_REQ_ABORTED;
|
||||
gSCSI->finished(request, 1);
|
||||
return;
|
||||
@ -1158,7 +1161,6 @@ AHCIPort::ScsiExecuteRequest(scsi_ccb* request)
|
||||
ASSERT(request->data_length == 0);
|
||||
break;
|
||||
case SCSI_DIR_IN:
|
||||
ASSERT(request->data_length > 0);
|
||||
break;
|
||||
case SCSI_DIR_OUT:
|
||||
isWrite = true;
|
||||
|
Loading…
x
Reference in New Issue
Block a user