Skip to content

Commit

Permalink
net/mana: prevent values overflow returned from RDMA layer
Browse files Browse the repository at this point in the history
The device capabilities reported from RDMA layer are in int. Those
values can overflow with the data types defined in dev_info_get().

Fix this by doing a upper bound before returning those values.

Fixes: 517ed6e ("net/mana: add basic driver with build environment")
Cc: stable@dpdk.org

Signed-off-by: Long Li <longli@microsoft.com>
  • Loading branch information
longlimsft authored and ferruhy committed Jan 22, 2024
1 parent 5cfe5c5 commit bd70637
Showing 1 changed file with 14 additions and 10 deletions.
24 changes: 14 additions & 10 deletions drivers/net/mana/mana.c
Original file line number Diff line number Diff line change
Expand Up @@ -296,8 +296,8 @@ mana_dev_info_get(struct rte_eth_dev *dev,
dev_info->min_rx_bufsize = MIN_RX_BUF_SIZE;
dev_info->max_rx_pktlen = MANA_MAX_MTU + RTE_ETHER_HDR_LEN;

dev_info->max_rx_queues = priv->max_rx_queues;
dev_info->max_tx_queues = priv->max_tx_queues;
dev_info->max_rx_queues = RTE_MIN(priv->max_rx_queues, UINT16_MAX);
dev_info->max_tx_queues = RTE_MIN(priv->max_tx_queues, UINT16_MAX);

dev_info->max_mac_addrs = MANA_MAX_MAC_ADDR;
dev_info->max_hash_mac_addrs = 0;
Expand Down Expand Up @@ -338,16 +338,20 @@ mana_dev_info_get(struct rte_eth_dev *dev,

/* Buffer limits */
dev_info->rx_desc_lim.nb_min = MIN_BUFFERS_PER_QUEUE;
dev_info->rx_desc_lim.nb_max = priv->max_rx_desc;
dev_info->rx_desc_lim.nb_max = RTE_MIN(priv->max_rx_desc, UINT16_MAX);
dev_info->rx_desc_lim.nb_align = MIN_BUFFERS_PER_QUEUE;
dev_info->rx_desc_lim.nb_seg_max = priv->max_recv_sge;
dev_info->rx_desc_lim.nb_mtu_seg_max = priv->max_recv_sge;
dev_info->rx_desc_lim.nb_seg_max =
RTE_MIN(priv->max_recv_sge, UINT16_MAX);
dev_info->rx_desc_lim.nb_mtu_seg_max =
RTE_MIN(priv->max_recv_sge, UINT16_MAX);

dev_info->tx_desc_lim.nb_min = MIN_BUFFERS_PER_QUEUE;
dev_info->tx_desc_lim.nb_max = priv->max_tx_desc;
dev_info->tx_desc_lim.nb_max = RTE_MIN(priv->max_tx_desc, UINT16_MAX);
dev_info->tx_desc_lim.nb_align = MIN_BUFFERS_PER_QUEUE;
dev_info->tx_desc_lim.nb_seg_max = priv->max_send_sge;
dev_info->rx_desc_lim.nb_mtu_seg_max = priv->max_recv_sge;
dev_info->tx_desc_lim.nb_seg_max =
RTE_MIN(priv->max_send_sge, UINT16_MAX);
dev_info->tx_desc_lim.nb_mtu_seg_max =
RTE_MIN(priv->max_send_sge, UINT16_MAX);

/* Speed */
dev_info->speed_capa = RTE_ETH_LINK_SPEED_100G;
Expand Down Expand Up @@ -1385,9 +1389,9 @@ mana_probe_port(struct ibv_device *ibdev, struct ibv_device_attr_ex *dev_attr,
priv->max_mr = dev_attr->orig_attr.max_mr;
priv->max_mr_size = dev_attr->orig_attr.max_mr_size;

DRV_LOG(INFO, "dev %s max queues %d desc %d sge %d",
DRV_LOG(INFO, "dev %s max queues %d desc %d sge %d mr " PRIu64,
name, priv->max_rx_queues, priv->max_rx_desc,
priv->max_send_sge);
priv->max_send_sge, priv->max_mr_size);

rte_eth_copy_pci_info(eth_dev, pci_dev);

Expand Down

0 comments on commit bd70637

Please sign in to comment.