On Thu, Jan 4, 2024 at 4:39 PM Maxime Coquelin <maxime.coquelin@xxxxxxxxxx> wrote: > > This patch adds Virtio-net device type to the supported > devices types. > > Initialization fails if the device does not support > VIRTIO_F_VERSION_1 feature, in order to guarantee the > configuration space is read-only. It also fails with > -EPERM if the CAP_NET_ADMIN is missing. > > Signed-off-by: Maxime Coquelin <maxime.coquelin@xxxxxxxxxx> Reviewed-by: Eugenio Pérez <eperezma@xxxxxxxxxx> > --- > drivers/vdpa/vdpa_user/vduse_dev.c | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/drivers/vdpa/vdpa_user/vduse_dev.c b/drivers/vdpa/vdpa_user/vduse_dev.c > index 94f54ea2eb06..4057b34ff995 100644 > --- a/drivers/vdpa/vdpa_user/vduse_dev.c > +++ b/drivers/vdpa/vdpa_user/vduse_dev.c > @@ -151,6 +151,7 @@ static struct workqueue_struct *vduse_irq_bound_wq; > > static u32 allowed_device_id[] = { > VIRTIO_ID_BLOCK, > + VIRTIO_ID_NET, > }; > > static inline struct vduse_dev *vdpa_to_vduse(struct vdpa_device *vdpa) > @@ -1694,6 +1695,10 @@ static bool features_is_valid(struct vduse_dev_config *config) > (config->features & VDUSE_NET_INVALID_FEATURES_MASK)) > return false; > > + if ((config->device_id == VIRTIO_ID_NET) && > + !(config->features & (1ULL << VIRTIO_F_VERSION_1))) > + return false; > + > return true; > } > > @@ -1801,6 +1806,10 @@ static int vduse_create_dev(struct vduse_dev_config *config, > int ret; > struct vduse_dev *dev; > > + ret = -EPERM; > + if ((config->device_id == VIRTIO_ID_NET) && !capable(CAP_NET_ADMIN)) > + goto err; > + > ret = -EEXIST; > if (vduse_find_dev(config->name)) > goto err; > @@ -2044,6 +2053,7 @@ static const struct vdpa_mgmtdev_ops vdpa_dev_mgmtdev_ops = { > > static struct virtio_device_id id_table[] = { > { VIRTIO_ID_BLOCK, VIRTIO_DEV_ANY_ID }, > + { VIRTIO_ID_NET, VIRTIO_DEV_ANY_ID }, > { 0 }, > }; > > -- > 2.43.0 > >