scsi-lowlevel.c: check that task/datain are valid before we unmarshalling

Signed-off-by: Ronnie Sahlberg <ronniesahlberg@gmail.com>
This commit is contained in:
Ronnie Sahlberg
2014-09-27 09:48:16 -07:00
parent edbfb12232
commit f3205bb095

View File

@@ -3252,19 +3252,18 @@ scsi_datain_getfullsize(struct scsi_task *task)
void * void *
scsi_datain_unmarshall(struct scsi_task *task) scsi_datain_unmarshall(struct scsi_task *task)
{ {
switch (task->cdb[0]) { if (!task || !task->datain.size)
case SCSI_OPCODE_TESTUNITREADY:
return NULL; return NULL;
switch (task->cdb[0]) {
case SCSI_OPCODE_INQUIRY: case SCSI_OPCODE_INQUIRY:
return scsi_inquiry_datain_unmarshall(task); return scsi_inquiry_datain_unmarshall(task);
case SCSI_OPCODE_MODESENSE6: case SCSI_OPCODE_MODESENSE6:
return scsi_modesense_datain_unmarshall(task, 1); return scsi_modesense_datain_unmarshall(task, 1);
case SCSI_OPCODE_MODESENSE10: case SCSI_OPCODE_MODESENSE10:
return scsi_modesense_datain_unmarshall(task, 0); return scsi_modesense_datain_unmarshall(task, 0);
case SCSI_OPCODE_READCAPACITY10: case SCSI_OPCODE_READCAPACITY10:
return scsi_readcapacity10_datain_unmarshall(task); return scsi_readcapacity10_datain_unmarshall(task);
case SCSI_OPCODE_SYNCHRONIZECACHE10:
return NULL;
case SCSI_OPCODE_READTOC: case SCSI_OPCODE_READTOC:
return scsi_readtoc_datain_unmarshall(task); return scsi_readtoc_datain_unmarshall(task);
case SCSI_OPCODE_REPORTLUNS: case SCSI_OPCODE_REPORTLUNS: