>
> Binding/unbinding of virtio driver inside VM leads to reconfiguration
> of PMD threads. This behaviour may be abused by executing bind/unbind
> in an infinite loop to break normal networking on all ports attached
> to the same instance of Open vSwitch.
>
> Fix that by avoiding reconfiguration if it's not necessary.
> Number of queues will not be decreased to 1 on device disconnection but
> it's not very important in comparison with possible DOS attack from the
> inside of guest OS.
>
> Fixes: 81acebdaaf27 ("netdev-dpdk: Obtain number of queues for vhost
> ports from attached virtio.")
> Reported-by: Ciara Loftus <[email protected]>
> Signed-off-by: Ilya Maximets <[email protected]>
> ---
> lib/netdev-dpdk.c | 17 ++++++++---------
> 1 file changed, 8 insertions(+), 9 deletions(-)
>
> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
> index a0d541a..98369f1 100644
> --- a/lib/netdev-dpdk.c
> +++ b/lib/netdev-dpdk.c
> @@ -2273,11 +2273,14 @@ new_device(struct virtio_net *virtio_dev)
> newnode = dev->socket_id;
> }
>
> - dev->requested_socket_id = newnode;
> - dev->requested_n_rxq = qp_num;
> - dev->requested_n_txq = qp_num;
> - netdev_request_reconfigure(&dev->up);
> -
> + if (dev->requested_n_txq != qp_num
> + || dev->requested_n_rxq != qp_num
> + || dev->requested_socket_id != newnode) {
> + dev->requested_socket_id = newnode;
> + dev->requested_n_rxq = qp_num;
> + dev->requested_n_txq = qp_num;
> + netdev_request_reconfigure(&dev->up);
> + }
> ovsrcu_set(&dev->virtio_dev, virtio_dev);
> exists = true;
>
> @@ -2333,11 +2336,7 @@ destroy_device(volatile struct virtio_net
> *virtio_dev)
> ovs_mutex_lock(&dev->mutex);
> virtio_dev->flags &= ~VIRTIO_DEV_RUNNING;
> ovsrcu_set(&dev->virtio_dev, NULL);
> - /* Clear tx/rx queue settings. */
> netdev_dpdk_txq_map_clear(dev);
> - dev->requested_n_rxq = NR_QUEUE;
> - dev->requested_n_txq = NR_QUEUE;
> - netdev_request_reconfigure(&dev->up);
Hi Ilya,
I assume we will still poll on N queues despite the device being down? Do you
have any data showing how this may affect performance?
Thanks,
Ciara
>
> netdev_change_seq_changed(&dev->up);
> ovs_mutex_unlock(&dev->mutex);
> --
> 2.7.4
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev