Patch "KVM: s390: virtio-ccw: don't overwrite config space values" has been added to the 4.0-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
KVM: s390: virtio-ccw: don't overwrite config space values
to the 4.0-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
kvm-s390-virtio-ccw-don-t-overwrite-config-space-values.patch
and it can be found in the queue-4.0 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
431dae778aea4eed31bd12e5ee82edc571cd4d70Mon Sep 17 00:00:00 2001
From: Cornelia Huck <[email protected]>
Date: Mon, 29 Jun 2015 16:44:01 +0200
Subject: KVM: s390: virtio-ccw: don't overwrite config space values
From: Cornelia Huck <[email protected]>
commit 431dae778aea4eed31bd12e5ee82edc571cd4d70 upstream.
Eric noticed problems with vhost-scsi and virtio-ccw: vhost-scsi complained about overwriting values in the config space, which was triggered by a broken implementation of virtio-ccw's config get/set routines. It was probably sheer luck that we did not hit this before.
When writing a value to the config space, the WRITE_CONF ccw will always write from the beginning of the config space up to and including the value to be set. If the config space up to the value has not yet been retrieved from the device, however, we'll end up overwriting values. Keep track of the known config space and update if needed to avoid this.
Moreover, READ_CONF will only read the number of bytes it has been instructed to retrieve, so we must not copy more than that to the buffer, or we might overwrite trailing values.
--- drivers/s390/kvm/virtio_ccw.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)
drivers/s390/kvm/virtio_ccw.c +9 -2
@@ -65,6 +65,7 @@ struct virtio_ccw_device {bool is_thinint;bool going_away;bool device_lost; +unsigned int config_ready;void *airq_info; };
@@ -833,8 +834,11 @@ static void virtio_ccw_get_config(structif (ret) goto out_free; -memcpy (vcdev->config, config_area,sizeof (vcdev->config)); -memcpy (buf, &vcdev->config[offset], len); +memcpy (vcdev->config, config_area, offset + len); +if (buf) +memcpy (buf, &vcdev->config[offset], len); +if (vcdev->config_ready < offset + len) + vcdev->config_ready = offset + len; out_free:kfree (config_area);
@@ -857,6 +861,9 @@ static void virtio_ccw_set_config(structif (!config_area) goto out_free; +/* Make sure we don't overwrite fields. */ +if (vcdev->config_ready < offset) +virtio_ccw_get_config (vdev,0 ,NULL , offset);memcpy (&vcdev->config[offset], buf, len);/* Write the config area to the host. */ memcpy (config_area, vcdev->config,sizeof (vcdev->config));
Patches currently in stable-queue which might be from [email protected] are
queue-4.0/kvm-s390-virtio-ccw-don-t-overwrite-config-space-values.patch