SCSI: Fix spurious request sense in error handling (regression in 3.14)

svn path=/dists/sid/linux/; revision=21441
This commit is contained in:
Ben Hutchings 2014-06-15 23:11:58 +00:00
parent 48093cb0d1
commit 7ed1428a75
3 changed files with 40 additions and 0 deletions

1
debian/changelog vendored
View File

@ -228,6 +228,7 @@ linux (3.14.7-1) UNRELEASED; urgency=medium
* auditsc: audit_krule mask accesses need bounds checking (CVE-2014-3917)
* fs,userns: Change inode_capable to capable_wrt_inode_uidgid
(CVE-2014-4014)
* SCSI: Fix spurious request sense in error handling (regression in 3.14)
-- Ian Campbell <ijc@hellion.org.uk> Fri, 06 Jun 2014 18:18:41 +0100

View File

@ -0,0 +1,38 @@
From: James Bottomley <JBottomley@Parallels.com>
Date: Fri, 28 Mar 2014 10:50:17 -0700
Subject: [SCSI] Fix spurious request sense in error handling
Origin: https://git.kernel.org/linus/d555a2abf3481f81303d835046a5ec2c4fb3ca8e
We unconditionally execute scsi_eh_get_sense() to make sure all failed
commands that should have sense attached, do. However, the routine forgets
that some commands, because of the way they fail, will not have any sense code
... we should not bother them with a REQUEST_SENSE command. Fix this by
testing to see if we actually got a CHECK_CONDITION return and skip asking for
sense if we don't.
Tested-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
---
drivers/scsi/scsi_error.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index 771c16b..d020149 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -1157,6 +1157,15 @@ int scsi_eh_get_sense(struct list_head *work_q,
__func__));
break;
}
+ if (status_byte(scmd->result) != CHECK_CONDITION)
+ /*
+ * don't request sense if there's no check condition
+ * status because the error we're processing isn't one
+ * that has a sense code (and some devices get
+ * confused by sense requests out of the blue)
+ */
+ continue;
+
SCSI_LOG_ERROR_RECOVERY(2, scmd_printk(KERN_INFO, scmd,
"%s: requesting sense\n",
current->comm));

View File

@ -95,3 +95,4 @@ debian/drivers-base-platform-avoid-abi-change-in-3.14.6.patch
debian/dma-avoid-abi-change-in-3.14.6.patch
bugfix/all/fs-userns-change-inode_capable-to-capable_wrt_inode_uidgid.patch
debian/vfs-avoid-abi-change-for-cve-2014-4014.patch
bugfix/all/SCSI-Fix-spurious-request-sense-in-error-handling.patch