[v2] ethdev: limit maximum number of queues
Checks
Commit Message
A buffer overflow happens in testpmd with some drivers
since the queue arrays are limited to RTE_MAX_QUEUES_PER_PORT.
The advertised capabilities of mlx4, mlx5 and softnic
for the number of queues were the maximum number: UINT16_MAX.
They must be limited by the configured RTE_MAX_QUEUES_PER_PORT
that applications expect to be respected.
The limitation is applied at ethdev level (function rte_eth_dev_info_get),
in order to force the configured limit for all drivers.
Fixes: 14b53e27b30e ("ethdev: fix crash with multiprocess")
Cc: stable@dpdk.org
Reported-by: Raslan Darawsheh <rasland@mellanox.com>
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
v2: remove changes in drivers, keep limit only in ethdev
---
lib/librte_ethdev/rte_ethdev.c | 6 ++++++
1 file changed, 6 insertions(+)
Comments
On Wed, Nov 27, 2019 at 3:31 PM Thomas Monjalon <thomas@monjalon.net> wrote:
>
> A buffer overflow happens in testpmd with some drivers
> since the queue arrays are limited to RTE_MAX_QUEUES_PER_PORT.
>
> The advertised capabilities of mlx4, mlx5 and softnic
> for the number of queues were the maximum number: UINT16_MAX.
> They must be limited by the configured RTE_MAX_QUEUES_PER_PORT
> that applications expect to be respected.
>
> The limitation is applied at ethdev level (function rte_eth_dev_info_get),
> in order to force the configured limit for all drivers.
>
> Fixes: 14b53e27b30e ("ethdev: fix crash with multiprocess")
> Cc: stable@dpdk.org
>
> Reported-by: Raslan Darawsheh <rasland@mellanox.com>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
Reviewed-by: David Marchand <david.marchand@redhat.com>
27/11/2019 15:47, David Marchand:
> On Wed, Nov 27, 2019 at 3:31 PM Thomas Monjalon <thomas@monjalon.net> wrote:
> >
> > A buffer overflow happens in testpmd with some drivers
> > since the queue arrays are limited to RTE_MAX_QUEUES_PER_PORT.
> >
> > The advertised capabilities of mlx4, mlx5 and softnic
> > for the number of queues were the maximum number: UINT16_MAX.
> > They must be limited by the configured RTE_MAX_QUEUES_PER_PORT
> > that applications expect to be respected.
> >
> > The limitation is applied at ethdev level (function rte_eth_dev_info_get),
> > in order to force the configured limit for all drivers.
> >
> > Fixes: 14b53e27b30e ("ethdev: fix crash with multiprocess")
> > Cc: stable@dpdk.org
> >
> > Reported-by: Raslan Darawsheh <rasland@mellanox.com>
> > Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> > Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
>
> Reviewed-by: David Marchand <david.marchand@redhat.com>
Applied
@@ -2986,6 +2986,12 @@ rte_eth_dev_info_get(uint16_t port_id, struct rte_eth_dev_info *dev_info)
return eth_err(port_id, diag);
}
+ /* Maximum number of queues should be <= RTE_MAX_QUEUES_PER_PORT */
+ dev_info->max_rx_queues = RTE_MIN(dev_info->max_rx_queues,
+ RTE_MAX_QUEUES_PER_PORT);
+ dev_info->max_tx_queues = RTE_MIN(dev_info->max_tx_queues,
+ RTE_MAX_QUEUES_PER_PORT);
+
dev_info->driver_name = dev->device->driver->name;
dev_info->nb_rx_queues = dev->data->nb_rx_queues;
dev_info->nb_tx_queues = dev->data->nb_tx_queues;