]> err.no Git - linux-2.6/blobdiff - drivers/scsi/scsi_lib.c
[SCSI] erase invalid data returned by device
[linux-2.6] / drivers / scsi / scsi_lib.c
index a82d2fe80fb544da5afb86d835e6fbafb3a74533..cbf55d59a54ce4f289c4aeb28948df583aaf445d 100644 (file)
@@ -207,6 +207,15 @@ int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,
         */
        blk_execute_rq(req->q, NULL, req, 1);
 
+       /*
+        * Some devices (USB mass-storage in particular) may transfer
+        * garbage data together with a residue indicating that the data
+        * is invalid.  Prevent the garbage from being misinterpreted
+        * and prevent security leaks by zeroing out the excess data.
+        */
+       if (unlikely(req->data_len > 0 && req->data_len <= bufflen))
+               memset(buffer + (bufflen - req->data_len), 0, req->data_len);
+
        ret = req->errors;
  out:
        blk_put_request(req);