1. check nb_segs > Tx ring size for TSO case.
2. report nb_mtu_seg_max and nb_seg_max in dev_info.

Fixes: a2b29a7733ef ("net/avf: enable basic Rx Tx")
Cc: sta...@dpdk.org

Signed-off-by: Qi Zhang <qi.z.zh...@intel.com>
---
 drivers/net/iavf/iavf_ethdev.c | 2 ++
 drivers/net/iavf/iavf_rxtx.c   | 3 ++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
index 98cc5c8ea8..0c6ab4ac5a 100644
--- a/drivers/net/iavf/iavf_ethdev.c
+++ b/drivers/net/iavf/iavf_ethdev.c
@@ -1207,6 +1207,8 @@ iavf_dev_info_get(struct rte_eth_dev *dev, struct 
rte_eth_dev_info *dev_info)
                .nb_max = IAVF_MAX_RING_DESC,
                .nb_min = IAVF_MIN_RING_DESC,
                .nb_align = IAVF_ALIGN_RING_DESC,
+               .nb_mtu_seg_max = IAVF_TX_MAX_MTU_SEG,
+               .nb_seg_max = IAVF_MAX_RING_DESC,
        };
 
        dev_info->err_handle_mode = RTE_ETH_ERROR_HANDLE_MODE_PASSIVE;
diff --git a/drivers/net/iavf/iavf_rxtx.c b/drivers/net/iavf/iavf_rxtx.c
index 610912f635..45f638c1d2 100644
--- a/drivers/net/iavf/iavf_rxtx.c
+++ b/drivers/net/iavf/iavf_rxtx.c
@@ -3656,7 +3656,8 @@ iavf_prep_pkts(__rte_unused void *tx_queue, struct 
rte_mbuf **tx_pkts,
                                return i;
                        }
                } else if ((m->tso_segsz < IAVF_MIN_TSO_MSS) ||
-                          (m->tso_segsz > IAVF_MAX_TSO_MSS)) {
+                          (m->tso_segsz > IAVF_MAX_TSO_MSS) ||
+                          (m->nb_segs > txq->nb_tx_desc)) {
                        /* MSS outside the range are considered malicious */
                        rte_errno = EINVAL;
                        return i;
-- 
2.31.1

Reply via email to