From: Hyong Youb Kim Date: Wed, 10 Jan 2018 09:17:04 +0000 (-0800) Subject: net/enic: fix L4 Rx ptype comparison X-Git-Tag: spdx-start~351 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=5dbff3af25a4a68980992f5040246e1d7f20b4cd;p=dpdk.git net/enic: fix L4 Rx ptype comparison For non-UDP/TCP packets, enic may wrongly set PKT_RX_L4_CKSUM_BAD in ol_flags. The comparison that checks if a packet is UDP or TCP assumes that RTE_PTYPE_L4 values are bit flags, but they are not. For example, the following evaluates to true because NONFRAG is 0x600 and UDP is 0x200, and causes the current code to think the packet is UDP. !!(RTE_PTYPE_L4_NONFRAG & RTE_PTYPE_L4_UDP) So, fix this by comparing the packet type against UDP and TCP individually. Fixes: 453d15059b58 ("net/enic: use new Rx checksum flags") Cc: stable@dpdk.org Signed-off-by: Hyong Youb Kim Reviewed-by: John Daley --- diff --git a/drivers/net/enic/enic_rxtx.c b/drivers/net/enic/enic_rxtx.c index c393465dad..a10d9bd728 100644 --- a/drivers/net/enic/enic_rxtx.c +++ b/drivers/net/enic/enic_rxtx.c @@ -282,7 +282,8 @@ enic_cq_rx_to_pkt_flags(struct cq_desc *cqd, struct rte_mbuf *mbuf) else pkt_flags |= PKT_RX_IP_CKSUM_BAD; - if (l4_flags & (RTE_PTYPE_L4_UDP | RTE_PTYPE_L4_TCP)) { + if (l4_flags == RTE_PTYPE_L4_UDP || + l4_flags == RTE_PTYPE_L4_TCP) { if (enic_cq_rx_desc_tcp_udp_csum_ok(cqrd)) pkt_flags |= PKT_RX_L4_CKSUM_GOOD; else