Home Home > GIT Browse
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlaf Hering <ohering@suse.de>2017-10-20 12:20:33 +0200
committerOlaf Hering <ohering@suse.de>2017-10-20 12:23:28 +0200
commit7bb20ab011d67336b1aed95f75eba828bc0b0716 (patch)
tree6e0fca74c94c725cfa24648caee231dda16127ba
parent448e55fe77925e3a787d60a42405589334e27e44 (diff)
scsi: storvsc: fix memory leak on ring buffer busy
-rw-r--r--patches.suse/msft-hv-1452-scsi-storvsc-fix-memory-leak-on-ring-buffer-busy.patch37
-rw-r--r--series.conf1
2 files changed, 38 insertions, 0 deletions
diff --git a/patches.suse/msft-hv-1452-scsi-storvsc-fix-memory-leak-on-ring-buffer-busy.patch b/patches.suse/msft-hv-1452-scsi-storvsc-fix-memory-leak-on-ring-buffer-busy.patch
new file mode 100644
index 0000000000..4c8c1d6694
--- /dev/null
+++ b/patches.suse/msft-hv-1452-scsi-storvsc-fix-memory-leak-on-ring-buffer-busy.patch
@@ -0,0 +1,37 @@
+From: Long Li <longli@microsoft.com>
+Date: Mon, 28 Aug 2017 17:43:59 -0700
+Patch-mainline: v4.14-rc1
+Subject: scsi: storvsc: fix memory leak on ring buffer busy
+Git-commit: 0208eeaa650c5c866a3242201678a19e6dc4a14e
+References: fate#323887
+
+When storvsc is sending I/O to Hyper-v, it may allocate a bigger buffer
+descriptor for large data payload that can't fit into a pre-allocated
+buffer descriptor. This bigger buffer is freed on return path.
+
+If I/O request to Hyper-v fails due to ring buffer busy, the storvsc
+allocated buffer descriptor should also be freed.
+
+[mkp: applied by hand]
+
+Fixes: be0cf6ca301c ("scsi: storvsc: Set the tablesize based on the information given by the host")
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Long Li <longli@microsoft.com>
+Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
+Acked-by: Olaf Hering <ohering@suse.de>
+---
+ drivers/scsi/storvsc_drv.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
+--- a/drivers/scsi/storvsc_drv.c
++++ b/drivers/scsi/storvsc_drv.c
+@@ -1640,6 +1640,8 @@ static int storvsc_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *scmnd)
+ put_cpu();
+
+ if (ret == -EAGAIN) {
++ if (payload_sz > sizeof(cmd_request->mpb))
++ kfree(payload);
+ /* no more space */
+ return SCSI_MLQUEUE_DEVICE_BUSY;
+ }
diff --git a/series.conf b/series.conf
index 0d8a7975d6..2fe1b612ca 100644
--- a/series.conf
+++ b/series.conf
@@ -1700,6 +1700,7 @@
patches.suse/msft-hv-1447-hv_netvsc-Clean-up-unused-parameter-from-netvsc_get_.patch
patches.suse/msft-hv-1448-hv_netvsc-Add-ethtool-handler-to-set-and-get-UDP-has.patch
patches.suse/msft-hv-1449-hv_netvsc-Fix-rndis_filter_close-error-during-netvsc.patch
+ patches.suse/msft-hv-1452-scsi-storvsc-fix-memory-leak-on-ring-buffer-busy.patch
patches.suse/suse-hv-guest-os-id.patch
patches.suse/suse-hv-kvp_on_msg.dbg.patch