linux/drivers/s390
Halil Pasic 6b84af3d2a virtio/s390: fix race in ccw_io_helper()
commit 78b1a52e05 upstream.

While ccw_io_helper() seems like intended to be exclusive in a sense that
it is supposed to facilitate I/O for at most one thread at any given
time, there is actually nothing ensuring that threads won't pile up at
vcdev->wait_q. If they do, all threads get woken up and see the status
that belongs to some other request than their own. This can lead to bugs.
For an example see:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1788432

This race normally does not cause any problems. The operations provided
by struct virtio_config_ops are usually invoked in a well defined
sequence, normally don't fail, and are normally used quite infrequent
too.

Yet, if some of the these operations are directly triggered via sysfs
attributes, like in the case described by the referenced bug, userspace
is given an opportunity to force races by increasing the frequency of the
given operations.

Let us fix the problem by ensuring, that for each device, we finish
processing the previous request before starting with a new one.

Signed-off-by: Halil Pasic <pasic@linux.ibm.com>
Reported-by: Colin Ian King <colin.king@canonical.com>
Message-Id: <20180925121309.58524-3-pasic@linux.ibm.com>
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
[bwh: Backported to 3.16: adjust filename]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
History 2019-02-11 17:54:22 +00:00
..
block s390/dasd: Restore a necessary cast 2019-02-11 17:53:13 +00:00
char s390/vmlogrdr: fix IUCV buffer allocation 2017-03-16 02:26:34 +00:00
cio s390/qdio: reset old sbal_state flags 2018-12-16 22:08:04 +00:00
crypto crypto: prefix module autoloading with "crypto-" 2015-02-04 10:57:48 +00:00
kvm virtio/s390: fix race in ccw_io_helper() 2019-02-11 17:54:22 +00:00
net s390/qeth: fix length check in SNMP processing 2019-02-11 17:54:15 +00:00
scsi scsi: zfcp: fix missing REC trigger trace on enqueue without ERP thread 2018-11-20 18:04:58 +00:00
Makefile [S390] split/move machine check handler code 2009-03-26 15:24:10 +01:00