Re: [PATCH RFC v6 12/20] virtio: disallow late feature changes for virtio-1

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 11 Dec 2014 14:25:14 +0100
Cornelia Huck <cornelia.huck@xxxxxxxxxx> wrote:

> For virtio-1 devices, the driver must not attempt to set feature bits
> after it set FEATURES_OK in the device status. Simply reject it in
> that case.
> 
> Signed-off-by: Cornelia Huck <cornelia.huck@xxxxxxxxxx>
> ---
>  hw/virtio/virtio.c         |   16 ++++++++++++++--
>  include/hw/virtio/virtio.h |    2 ++
>  2 files changed, 16 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
> index 57190ba..a3dd67b 100644
> --- a/hw/virtio/virtio.c
> +++ b/hw/virtio/virtio.c
> @@ -978,7 +978,7 @@ void virtio_save(VirtIODevice *vdev, QEMUFile *f)
>      vmstate_save_state(f, &vmstate_virtio, vdev);
>  }
> 
> -int virtio_set_features(VirtIODevice *vdev, uint64_t val)
> +static int __virtio_set_features(VirtIODevice *vdev, uint64_t val)

Maybe avoid the double underscores here? But unfortunately, I also fail
to come up with a better suggestion for a name here ...

>  {
>      BusState *qbus = qdev_get_parent_bus(DEVICE(vdev));
>      VirtioBusClass *vbusk = VIRTIO_BUS_GET_CLASS(qbus);
> @@ -994,6 +994,18 @@ int virtio_set_features(VirtIODevice *vdev, uint64_t val)
>      return bad ? -1 : 0;
>  }
> 
> +int virtio_set_features(VirtIODevice *vdev, uint64_t val)
> +{
> +   /*
> +     * The driver must not attempt to set features after feature negotiation
> +     * has finished.
> +     */
> +    if (vdev->status & VIRTIO_CONFIG_S_FEATURES_OK) {
> +        return -EINVAL;
> +    }

Hmm, according to your patch description, the FEATURES_OK check only
applies to virtio-1.0 devices ... so shouldn't there be a check for
virtio-1 here? Or did I miss something?

> +    return __virtio_set_features(vdev, val);
> +}

 Thomas

_______________________________________________
Virtualization mailing list
Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx
https://lists.linuxfoundation.org/mailman/listinfo/virtualization




[Index of Archives]     [KVM Development]     [Libvirt Development]     [Libvirt Users]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux