> -----Original Message----- > From: Vitaly Kuznetsov [mailto:vkuznets@xxxxxxxxxx] > Sent: Thursday, June 25, 2015 9:12 AM > To: linux-scsi@xxxxxxxxxxxxxxx > Cc: Long Li; KY Srinivasan; Haiyang Zhang; James E.J. Bottomley; > devel@xxxxxxxxxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; Radim Krčmář > Subject: [PATCH] scsi: storvsc: be more picky about scmnd- > >sc_data_direction > > Under the 'default' case in scmnd->sc_data_direction we have 3 options: > - DMA_NONE which we handle correctly. > - DMA_BIDIRECTIONAL which is never supposed to be set by SCSI stack. > - Garbage value. > > Do WARN() and return -EINVAL in the last two cases. virtio_scsi does > BUG_ON() here but it looks like an overkill. > > Reported-by: Radim Krčmář <rkrcmar@xxxxxxxxxx> > Signed-off-by: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> Signed-off-by: K. Y. Srinivasan <kys@xxxxxxxxxxxxx> > --- > drivers/scsi/storvsc_drv.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c > index 3c6584f..61f4855 100644 > --- a/drivers/scsi/storvsc_drv.c > +++ b/drivers/scsi/storvsc_drv.c > @@ -1598,10 +1598,18 @@ static int storvsc_queuecommand(struct > Scsi_Host *host, struct scsi_cmnd *scmnd) > vm_srb->data_in = READ_TYPE; > vm_srb->win8_extension.srb_flags |= > SRB_FLAGS_DATA_IN; > break; > - default: > + case DMA_NONE: > vm_srb->data_in = UNKNOWN_TYPE; > vm_srb->win8_extension.srb_flags |= > SRB_FLAGS_NO_DATA_TRANSFER; > break; > + default: > + /* > + * This is DMA_BIDIRECTIONAL or something else we are > never > + * supposed to see here. > + */ > + WARN(1, "Unexpected data direction: %d\n", > + scmnd->sc_data_direction); > + return -EINVAL; > } > > > -- > 2.4.3 ��.n��������+%������w��{.n�����{������ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f