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 Fri, 12 Dec 2014 11:55:38 +0100
Thomas Huth <thuth@xxxxxxxxxxxxxxxxxx> wrote:

> 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 ...

virtio_set_features_nocheck()?

This function is only called within virtio.c anyway...

> 
> >  {
> >      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?

A device in legacy mode will never have FEATURES_OK set. But it is a
bit non-obvious - maybe adding a check for VERSION_1 does not hurt.

> 
> > +    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