Home Home > GIT Browse > SLE15
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Tesarik <ptesarik@suse.cz>2019-06-24 09:36:42 +0200
committerPetr Tesarik <ptesarik@suse.cz>2019-06-24 09:36:56 +0200
commita453fbc2e2031ccc65b5e02b7e6ee073370beec6 (patch)
tree60f1abca9f7ed02be444cb9a4136cc39e0629dfd
parentd659181daf44937ce8c215413f367d15f3341bff (diff)
s390/virtio: handle find on invalid queue gracefully
(bsc#1051510).
-rw-r--r--patches.fixes/s390-virtio-handle-find-on-invalid-queue-gracefully41
-rw-r--r--series.conf1
2 files changed, 42 insertions, 0 deletions
diff --git a/patches.fixes/s390-virtio-handle-find-on-invalid-queue-gracefully b/patches.fixes/s390-virtio-handle-find-on-invalid-queue-gracefully
new file mode 100644
index 0000000000..61c492a991
--- /dev/null
+++ b/patches.fixes/s390-virtio-handle-find-on-invalid-queue-gracefully
@@ -0,0 +1,41 @@
+From: Halil Pasic <pasic@linux.ibm.com>
+Date: Mon, 21 Jan 2019 13:19:43 +0100
+Subject: s390/virtio: handle find on invalid queue gracefully
+Git-commit: 3438b2c039b4bf26881786a1f3450f016d66ad11
+Patch-mainline: v5.1-rc1
+References: bsc#1051510
+
+A queue with a capacity of zero is clearly not a valid virtio queue.
+Some emulators report zero queue size if queried with an invalid queue
+index. Instead of crashing in this case let us just return -ENOENT. To
+make that work properly, let us fix the notifier cleanup logic as well.
+
+Cc: stable@vger.kernel.org
+Signed-off-by: Halil Pasic <pasic@linux.ibm.com>
+Signed-off-by: Cornelia Huck <cohuck@redhat.com>
+Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
+Acked-by: Petr Tesarik <ptesarik@suse.com>
+---
+ drivers/s390/virtio/virtio_ccw.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/drivers/s390/virtio/virtio_ccw.c
++++ b/drivers/s390/virtio/virtio_ccw.c
+@@ -275,6 +275,8 @@ static void virtio_ccw_drop_indicators(s
+ {
+ struct virtio_ccw_vq_info *info;
+
++ if (!vcdev->airq_info)
++ return;
+ list_for_each_entry(info, &vcdev->virtqueues, node)
+ drop_airq_indicator(info->vq, vcdev->airq_info);
+ }
+@@ -416,7 +418,7 @@ static int virtio_ccw_read_vq_conf(struc
+ ret = ccw_io_helper(vcdev, ccw, VIRTIO_CCW_DOING_READ_VQ_CONF);
+ if (ret)
+ return ret;
+- return vcdev->config_block->num;
++ return vcdev->config_block->num ?: -ENOENT;
+ }
+
+ static void virtio_ccw_del_vq(struct virtqueue *vq, struct ccw1 *ccw)
diff --git a/series.conf b/series.conf
index a8222e17b6..4592c6acc9 100644
--- a/series.conf
+++ b/series.conf
@@ -21701,6 +21701,7 @@
patches.arch/0003-dma-introduce-dma_max_mapping_size
patches.arch/0004-virtio-introduce-virtio_max_dma_size
patches.arch/0005-virtio-blk-consider-virtio_max_dma_size-for-maximum-segment-size
+ patches.fixes/s390-virtio-handle-find-on-invalid-queue-gracefully
patches.drivers/tpm-tpm_crb-Avoid-unaligned-reads-in-crb_recv.patch
patches.drivers/tpm-Fix-some-name-collisions-with-drivers-char-tpm.h.patch
patches.fixes/tipc-fix-RDM-DGRAM-connect-regression.patch