[v2] net/ixgbe: check illegal packets

Message ID 1581951075-56261-1-git-send-email-xiao.zhang@intel.com (mailing list archive)
State Accepted, archived
Delegated to: xiaolong ye
Headers
Series [v2] net/ixgbe: check illegal packets |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-testing success Testing PASS
ci/travis-robot warning Travis build: failed
ci/Intel-compilation fail apply issues

Commit Message

Xiao Zhang Feb. 17, 2020, 2:51 p.m. UTC
  Some illegal packets will lead to TX hang. This patch checks those
illegal packets and protects TX from hanging.

Fixes: 7829b8d52be0 ("net/ixgbe: add Tx preparation")
Cc: stable@dpdk.org

Signed-off-by: Xiao Zhang <xiao.zhang@intel.com>
---
v2 change the minimum packet length according to the datasheet.
---
 drivers/net/ixgbe/ixgbe_rxtx.c | 6 ++++++
 drivers/net/ixgbe/ixgbe_rxtx.h | 2 ++
 2 files changed, 8 insertions(+)
  

Comments

Ananyev, Konstantin Feb. 17, 2020, 3:09 p.m. UTC | #1
> 
> Some illegal packets will lead to TX hang. This patch checks those
> illegal packets and protects TX from hanging.
> 
> Fixes: 7829b8d52be0 ("net/ixgbe: add Tx preparation")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Xiao Zhang <xiao.zhang@intel.com>
> ---
> v2 change the minimum packet length according to the datasheet.
> ---
>  drivers/net/ixgbe/ixgbe_rxtx.c | 6 ++++++
>  drivers/net/ixgbe/ixgbe_rxtx.h | 2 ++
>  2 files changed, 8 insertions(+)
> 
> diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c
> index 7b398f1..f839bca 100644
> --- a/drivers/net/ixgbe/ixgbe_rxtx.c
> +++ b/drivers/net/ixgbe/ixgbe_rxtx.c
> @@ -986,6 +986,12 @@ ixgbe_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
>  			return i;
>  		}
> 
> +		/* check the size of packet */
> +		if (m->pkt_len < IXGBE_TX_MIN_PKT_LEN) {
> +			rte_errno = EINVAL;
> +			return i;
> +		}
> +
>  #ifdef RTE_LIBRTE_ETHDEV_DEBUG
>  		ret = rte_validate_tx_offload(m);
>  		if (ret != 0) {
> diff --git a/drivers/net/ixgbe/ixgbe_rxtx.h b/drivers/net/ixgbe/ixgbe_rxtx.h
> index 000c5b1..20a8b29 100644
> --- a/drivers/net/ixgbe/ixgbe_rxtx.h
> +++ b/drivers/net/ixgbe/ixgbe_rxtx.h
> @@ -53,6 +53,8 @@
> 
>  #define IXGBE_TX_MAX_SEG                    40
> 
> +#define IXGBE_TX_MIN_PKT_LEN		     14
> +
>  #define IXGBE_PACKET_TYPE_MASK_82599        0X7F
>  #define IXGBE_PACKET_TYPE_MASK_X550         0X10FF
>  #define IXGBE_PACKET_TYPE_MASK_TUNNEL       0XFF
> --

Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>

> 2.7.4
  
Xiaolong Ye Feb. 17, 2020, 4 p.m. UTC | #2
On 02/17, Xiao Zhang wrote:
>Some illegal packets will lead to TX hang. This patch checks those
>illegal packets and protects TX from hanging.
>
>Fixes: 7829b8d52be0 ("net/ixgbe: add Tx preparation")
>Cc: stable@dpdk.org
>
>Signed-off-by: Xiao Zhang <xiao.zhang@intel.com>
>---
>v2 change the minimum packet length according to the datasheet.
>---
> drivers/net/ixgbe/ixgbe_rxtx.c | 6 ++++++
> drivers/net/ixgbe/ixgbe_rxtx.h | 2 ++
> 2 files changed, 8 insertions(+)
>
>diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c
>index 7b398f1..f839bca 100644
>--- a/drivers/net/ixgbe/ixgbe_rxtx.c
>+++ b/drivers/net/ixgbe/ixgbe_rxtx.c
>@@ -986,6 +986,12 @@ ixgbe_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
> 			return i;
> 		}
> 
>+		/* check the size of packet */
>+		if (m->pkt_len < IXGBE_TX_MIN_PKT_LEN) {
>+			rte_errno = EINVAL;
>+			return i;
>+		}
>+
> #ifdef RTE_LIBRTE_ETHDEV_DEBUG
> 		ret = rte_validate_tx_offload(m);
> 		if (ret != 0) {
>diff --git a/drivers/net/ixgbe/ixgbe_rxtx.h b/drivers/net/ixgbe/ixgbe_rxtx.h
>index 000c5b1..20a8b29 100644
>--- a/drivers/net/ixgbe/ixgbe_rxtx.h
>+++ b/drivers/net/ixgbe/ixgbe_rxtx.h
>@@ -53,6 +53,8 @@
> 
> #define IXGBE_TX_MAX_SEG                    40
> 
>+#define IXGBE_TX_MIN_PKT_LEN		     14
>+
> #define IXGBE_PACKET_TYPE_MASK_82599        0X7F
> #define IXGBE_PACKET_TYPE_MASK_X550         0X10FF
> #define IXGBE_PACKET_TYPE_MASK_TUNNEL       0XFF
>-- 
>2.7.4
>

Acked-by: Xiaolong Ye <xiaolong.ye@intel.com>

Applied to dpdk-next-net-intel, Thanks.
  

Patch

diff --git a/drivers/net/ixgbe/ixgbe_rxtx.c b/drivers/net/ixgbe/ixgbe_rxtx.c
index 7b398f1..f839bca 100644
--- a/drivers/net/ixgbe/ixgbe_rxtx.c
+++ b/drivers/net/ixgbe/ixgbe_rxtx.c
@@ -986,6 +986,12 @@  ixgbe_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
 			return i;
 		}
 
+		/* check the size of packet */
+		if (m->pkt_len < IXGBE_TX_MIN_PKT_LEN) {
+			rte_errno = EINVAL;
+			return i;
+		}
+
 #ifdef RTE_LIBRTE_ETHDEV_DEBUG
 		ret = rte_validate_tx_offload(m);
 		if (ret != 0) {
diff --git a/drivers/net/ixgbe/ixgbe_rxtx.h b/drivers/net/ixgbe/ixgbe_rxtx.h
index 000c5b1..20a8b29 100644
--- a/drivers/net/ixgbe/ixgbe_rxtx.h
+++ b/drivers/net/ixgbe/ixgbe_rxtx.h
@@ -53,6 +53,8 @@ 
 
 #define IXGBE_TX_MAX_SEG                    40
 
+#define IXGBE_TX_MIN_PKT_LEN		     14
+
 #define IXGBE_PACKET_TYPE_MASK_82599        0X7F
 #define IXGBE_PACKET_TYPE_MASK_X550         0X10FF
 #define IXGBE_PACKET_TYPE_MASK_TUNNEL       0XFF