On 04/08/2017 10:36, Hannes Reinecke wrote: > The LUN0 emulation is just that, an emulation for a non-existing > LUN0. So we should be returning LUN_NOT_SUPPORTED for any request > coming from any other LUN. > And we should be aborting unhandled commands with INVALID OPCODE, > not LUN NOT SUPPORTED. > > Signed-off-by: Hannes Reinecke <h...@suse.com> > --- > hw/scsi/scsi-bus.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c > index 8419c75..79a222f 100644 > --- a/hw/scsi/scsi-bus.c > +++ b/hw/scsi/scsi-bus.c > @@ -583,6 +583,11 @@ static int32_t scsi_target_send_command(SCSIRequest > *req, uint8_t *buf) > { > SCSITargetReq *r = DO_UPCAST(SCSITargetReq, req, req); > > + if (req->lun != 0) { > + scsi_req_build_sense(req, SENSE_CODE(LUN_NOT_SUPPORTED)); > + scsi_req_complete(req, CHECK_CONDITION); > + return 0; > + } > switch (buf[0]) { > case REPORT_LUNS: > if (!scsi_target_emulate_report_luns(r)) { > @@ -613,7 +618,7 @@ static int32_t scsi_target_send_command(SCSIRequest *req, > uint8_t *buf) > case TEST_UNIT_READY: > break; > default: > - scsi_req_build_sense(req, SENSE_CODE(LUN_NOT_SUPPORTED)); > + scsi_req_build_sense(req, SENSE_CODE(INVALID_OPCODE)); > scsi_req_complete(req, CHECK_CONDITION); > return 0; > illegal_request: >
I am queuing this one since it's an independent bugfix. Paolo