[linux] 01/01: SCSI: fix crashes in sd and sr runtime PM (Closes: #801925)
debian-kernel at lists.debian.org
debian-kernel at lists.debian.org
Wed Jan 27 01:32:48 UTC 2016
This is an automated email from the git hooks/post-receive script.
benh pushed a commit to branch sid
in repository linux.
commit 76c256b5b8d8792af6a87632b3454e6ff9f2fe49
Author: Ben Hutchings <ben at decadent.org.uk>
Date: Wed Jan 27 01:32:15 2016 +0000
SCSI: fix crashes in sd and sr runtime PM (Closes: #801925)
---
debian/changelog | 1 +
.../scsi-fix-crashes-in-sd-and-sr-runtime-pm.patch | 82 ++++++++++++++++++++++
debian/patches/series | 1 +
3 files changed, 84 insertions(+)
diff --git a/debian/changelog b/debian/changelog
index 6616c29..7fc7228 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -53,6 +53,7 @@ linux (4.3.4-1) UNRELEASED; urgency=medium
[ Ben Hutchings ]
* fuse: break infinite loop in fuse_fill_write_pages() (CVE-2015-8785)
+ * SCSI: fix crashes in sd and sr runtime PM (Closes: #801925)
[ Salvatore Bonaccorso ]
* tcp: fix zero cwnd in tcp_cwnd_reduction (CVE-2016-2070)
diff --git a/debian/patches/bugfix/all/scsi-fix-crashes-in-sd-and-sr-runtime-pm.patch b/debian/patches/bugfix/all/scsi-fix-crashes-in-sd-and-sr-runtime-pm.patch
new file mode 100644
index 0000000..7807323
--- /dev/null
+++ b/debian/patches/bugfix/all/scsi-fix-crashes-in-sd-and-sr-runtime-pm.patch
@@ -0,0 +1,82 @@
+From: Alan Stern <stern at rowland.harvard.edu>
+Subject: SCSI: fix crashes in sd and sr runtime PM
+Date: Wed, 20 Jan 2016 11:26:01 -0500 (EST)
+Origin: http://article.gmane.org/gmane.linux.scsi/109795
+Bug-Debian: https://bugs.debian.org/801925
+
+Runtime suspend during driver probe and removal can cause problems.
+The driver's runtime_suspend or runtime_resume callbacks may invoked
+before the driver has finished binding to the device or after the
+driver has unbound from the device.
+
+This problem shows up with the sd and sr drivers, and can cause disk
+or CD/DVD drives to become unusable as a result. The fix is simple.
+The drivers store a pointer to the scsi_disk or scsi_cd structure as
+their private device data when probing is finished, so we simply have
+to be sure to clear the private data during removal and test it during
+runtime suspend/resume.
+
+This fixes <https://bugs.debian.org/801925>.
+
+Signed-off-by: Alan Stern <stern at rowland.harvard.edu>
+Reported-by: Paul Menzel <paul.menzel at giantmonkey.de>
+Reported-by: Erich Schubert <erich at debian.org>
+Reported-by: Alexandre Rossi <alexandre.rossi at gmail.com>
+Tested-by: Paul Menzel <paul.menzel at giantmonkey.de>
+CC: "James E.J. Bottomley" <JBottomley at odin.com>
+CC: Ben Hutchings <ben at decadent.org.uk>
+CC: <stable at vger.kernel.org>
+
+---
+
+
+[as1795]
+
+
+ drivers/scsi/sd.c | 7 +++++--
+ drivers/scsi/sr.c | 4 ++++
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+--- a/drivers/scsi/sd.c
++++ b/drivers/scsi/sd.c
+@@ -3142,8 +3142,8 @@ static int sd_suspend_common(struct devi
+ struct scsi_disk *sdkp = dev_get_drvdata(dev);
+ int ret = 0;
+
+- if (!sdkp)
+- return 0; /* this can happen */
++ if (!sdkp) /* E.g.: runtime suspend following sd_remove() */
++ return 0;
+
+ if (sdkp->WCE && sdkp->media_present) {
+ sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n");
+@@ -3182,6 +3182,9 @@ static int sd_resume(struct device *dev)
+ {
+ struct scsi_disk *sdkp = dev_get_drvdata(dev);
+
++ if (!sdkp) /* E.g.: runtime resume at the start of sd_probe() */
++ return 0;
++
+ if (!sdkp->device->manage_start_stop)
+ return 0;
+
+--- a/drivers/scsi/sr.c
++++ b/drivers/scsi/sr.c
+@@ -144,6 +144,9 @@ static int sr_runtime_suspend(struct dev
+ {
+ struct scsi_cd *cd = dev_get_drvdata(dev);
+
++ if (!cd) /* E.g.: runtime suspend following sr_remove() */
++ return 0;
++
+ if (cd->media_present)
+ return -EBUSY;
+ else
+@@ -985,6 +988,7 @@ static int sr_remove(struct device *dev)
+ scsi_autopm_get_device(cd->device);
+
+ del_gendisk(cd->disk);
++ dev_set_drvdata(dev, NULL);
+
+ mutex_lock(&sr_ref_mutex);
+ kref_put(&cd->kref, sr_kref_release);
diff --git a/debian/patches/series b/debian/patches/series
index ff4957e..3e8a2fb 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -142,3 +142,4 @@ bugfix/all/bcache-prevent-crash-on-changing-writeback_running.patch
bugfix/all/bcache-change-refill_dirty-to-always-scan-entire-dis.patch
bugfix/all/fuse-break-infinite-loop-in-fuse_fill_write_pages.patch
bugfix/all/tcp-fix-zero-cwnd-in-tcp_cwnd_reduction.patch
+bugfix/all/scsi-fix-crashes-in-sd-and-sr-runtime-pm.patch
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/kernel/linux.git
More information about the Kernel-svn-changes
mailing list