diff options
| -rw-r--r-- | drivers/scsi/scsi_lib.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index a82d2fe80fb5..cbf55d59a54c 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c | |||
| @@ -207,6 +207,15 @@ int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd, | |||
| 207 | */ | 207 | */ |
| 208 | blk_execute_rq(req->q, NULL, req, 1); | 208 | blk_execute_rq(req->q, NULL, req, 1); |
| 209 | 209 | ||
| 210 | /* | ||
| 211 | * Some devices (USB mass-storage in particular) may transfer | ||
| 212 | * garbage data together with a residue indicating that the data | ||
| 213 | * is invalid. Prevent the garbage from being misinterpreted | ||
| 214 | * and prevent security leaks by zeroing out the excess data. | ||
| 215 | */ | ||
| 216 | if (unlikely(req->data_len > 0 && req->data_len <= bufflen)) | ||
| 217 | memset(buffer + (bufflen - req->data_len), 0, req->data_len); | ||
| 218 | |||
| 210 | ret = req->errors; | 219 | ret = req->errors; |
| 211 | out: | 220 | out: |
| 212 | blk_put_request(req); | 221 | blk_put_request(req); |
