From: Michael S. Tsirkin Date: Thu, 4 Dec 2014 17:16:43 +0000 (+0200) Subject: virtio_ccw: rev 1 devices set VIRTIO_F_VERSION_1 X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=4d23676fb645f683b61943de9901d58c1e728a25;p=GitHub%2FLineageOS%2Fandroid_kernel_motorola_exynos9610.git virtio_ccw: rev 1 devices set VIRTIO_F_VERSION_1 What does it mean if rev 1 device does not set VIRTIO_F_VERSION_1? E.g. is it native endian? Let's not even try to drive such devices: fail attempts to finalize features. virtio core will detect this and bail out. Signed-off-by: Michael S. Tsirkin --- diff --git a/drivers/s390/kvm/virtio_ccw.c b/drivers/s390/kvm/virtio_ccw.c index 789275fb577f..f9f87ba013c9 100644 --- a/drivers/s390/kvm/virtio_ccw.c +++ b/drivers/s390/kvm/virtio_ccw.c @@ -758,6 +758,13 @@ static int virtio_ccw_finalize_features(struct virtio_device *vdev) struct virtio_feature_desc *features; struct ccw1 *ccw; + if (vcdev->revision == 1 && + !__virtio_test_bit(vdev, VIRTIO_F_VERSION_1)) { + dev_err(&vdev->dev, "virtio: device uses revision 1 " + "but does not have VIRTIO_F_VERSION_1\n"); + return -EINVAL; + } + ccw = kzalloc(sizeof(*ccw), GFP_DMA | GFP_KERNEL); if (!ccw) return 0;