diff --git a/examples/iscsi-dd.c b/examples/iscsi-dd.c index 01eee75..7dfae04 100644 --- a/examples/iscsi-dd.c +++ b/examples/iscsi-dd.c @@ -96,7 +96,7 @@ void read10_cb(struct iscsi_context *iscsi _U_, int status, void *command_data, wt->rt = task; wt->client = client; - read10_cdb = scsi_cdb_unmarshall(task); + read10_cdb = scsi_cdb_unmarshall(task, SCSI_OPCODE_READ10); if (read10_cdb == NULL) { printf("Failed to unmarshall READ10 CDB.\n"); exit(10); diff --git a/include/scsi-lowlevel.h b/include/scsi-lowlevel.h index 6d2a086..0e1a78e 100644 --- a/include/scsi-lowlevel.h +++ b/include/scsi-lowlevel.h @@ -671,7 +671,7 @@ struct scsi_read10_cdb { EXTERN int scsi_datain_getfullsize(struct scsi_task *task); EXTERN void *scsi_datain_unmarshall(struct scsi_task *task); -EXTERN void *scsi_cdb_unmarshall(struct scsi_task *task); +EXTERN void *scsi_cdb_unmarshall(struct scsi_task *task, enum scsi_opcode opcode); EXTERN struct scsi_task *scsi_cdb_read6(uint32_t lba, uint32_t xferlen, int blocksize); EXTERN struct scsi_task *scsi_cdb_read10(uint32_t lba, uint32_t xferlen, int blocksize, int rdprotect, int dpo, int fua, int fua_nv, int group_number); diff --git a/lib/scsi-lowlevel.c b/lib/scsi-lowlevel.c index a583a2b..7a9c9b3 100644 --- a/lib/scsi-lowlevel.c +++ b/lib/scsi-lowlevel.c @@ -2334,8 +2334,12 @@ scsi_read10_cdb_unmarshall(struct scsi_task *task) } void * -scsi_cdb_unmarshall(struct scsi_task *task) +scsi_cdb_unmarshall(struct scsi_task *task, enum scsi_opcode opcode) { + if (task->cdb[0] != opcode) { + return NULL; + } + switch (task->cdb[0]) { case SCSI_OPCODE_READ10: return scsi_read10_cdb_unmarshall(task);