Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bdb2b8ca authored by Alan Stern's avatar Alan Stern Committed by James Bottomley
Browse files

[SCSI] erase invalid data returned by device



This patch (as1108) fixes a problem that can occur with certain USB
mass-storage devices: They return invalid data together with a residue
indicating that the data should be ignored.  Rather than leave the
invalid data in a transfer buffer, where it can get misinterpreted,
the patch clears the invalid portion of the buffer.

This solves a problem (wrong write-protect setting detected) reported
by Maciej Rutecki and Peter Teoh.

Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Tested-by: default avatarPeter Teoh <htmldeveloper@gmail.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent b7279469
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -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);