Message ID | 1495147205-28778-1-git-send-email-longli@exchange.microsoft.com (mailing list archive) |
---|---|
State | Accepted, archived |
Headers | show |
Long, > In lower layer driver's (LLD) scsi_host_template, the driver may > optionally ask SCSI to allocate its private driver memory for each > command, by specifying cmd_size. This memory is allocated at the end > of scsi_cmnd by SCSI. Later when SCSI queues a command, the LLD can > use scsi_cmd_priv to get to its private data. > > Some LLD, e.g. hv_storvsc, doesn't clear its private data before > use. In this case, the LLD may get to stale or uninitialized data in > its private driver memory. This may result in unexpected driver and > hardware behavior. > > Fix this problem by also zeroing the private driver memory before > passing them to LLD. Applied to 4.12/scsi-fixes. Thank you!
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 19125d7..a821593 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -1850,7 +1850,7 @@ static int scsi_mq_prep_fn(struct request *req) /* zero out the cmd, except for the embedded scsi_request */ memset((char *)cmd + sizeof(cmd->req), 0, - sizeof(*cmd) - sizeof(cmd->req)); + sizeof(*cmd) - sizeof(cmd->req) + shost->hostt->cmd_size); req->special = cmd;