[dpdk-dev] net/mlx5: fix packet type and offload flags in Rx

Message ID 1467909285-896-1-git-send-email-maxime.leroy@6wind.com (mailing list archive)
State Accepted, archived
Delegated to: Bruce Richardson
Headers

Commit Message

Maxime Leroy July 7, 2016, 4:34 p.m. UTC
  In mlx5 rx function, the packet_type and ol_flags mbuf fields are not
properly initialized when no rx offload feature is enabled (checksum, l2
tun checksum, vlan_strip, crc). Thus, these fields can have a value
different of 0 depending on their value when the mbuf was freed.

This can result in an incorrect application behavior if invalid
ol_flags/ptype are set, or memory corruptions if IND_ATTACHED_MBUF is
set in ol_flags.

Fixes: 081f7eae242e ("mlx5: process offload flags only when requested")

Signed-off-by: Maxime Leroy <maxime.leroy@6wind.com>
---
 drivers/net/mlx5/mlx5_rxtx.c | 2 ++
 1 file changed, 2 insertions(+)
  

Comments

Adrien Mazarguil July 8, 2016, 7:09 a.m. UTC | #1
On Thu, Jul 07, 2016 at 06:34:45PM +0200, Maxime Leroy wrote:
> In mlx5 rx function, the packet_type and ol_flags mbuf fields are not
> properly initialized when no rx offload feature is enabled (checksum, l2
> tun checksum, vlan_strip, crc). Thus, these fields can have a value
> different of 0 depending on their value when the mbuf was freed.
> 
> This can result in an incorrect application behavior if invalid
> ol_flags/ptype are set, or memory corruptions if IND_ATTACHED_MBUF is
> set in ol_flags.
> 
> Fixes: 081f7eae242e ("mlx5: process offload flags only when requested")
> 
> Signed-off-by: Maxime Leroy <maxime.leroy@6wind.com>
> ---
>  drivers/net/mlx5/mlx5_rxtx.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c
> index 0c352f3f..4132fd74 100644
> --- a/drivers/net/mlx5/mlx5_rxtx.c
> +++ b/drivers/net/mlx5/mlx5_rxtx.c
> @@ -1599,6 +1599,8 @@ mlx5_rx_burst(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n)
>  			pkt = seg;
>  			assert(len >= (rxq->crc_present << 2));
>  			/* Update packet information. */
> +			pkt->packet_type = 0;
> +			pkt->ol_flags = 0;
>  			if (rxq->csum | rxq->csum_l2tun | rxq->vlan_strip |
>  			    rxq->crc_present) {
>  				if (rxq->csum) {
> -- 
> 2.1.4
> 

Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
  
Bruce Richardson July 8, 2016, 8:49 p.m. UTC | #2
On Fri, Jul 08, 2016 at 09:09:32AM +0200, Adrien Mazarguil wrote:
> On Thu, Jul 07, 2016 at 06:34:45PM +0200, Maxime Leroy wrote:
> > In mlx5 rx function, the packet_type and ol_flags mbuf fields are not
> > properly initialized when no rx offload feature is enabled (checksum, l2
> > tun checksum, vlan_strip, crc). Thus, these fields can have a value
> > different of 0 depending on their value when the mbuf was freed.
> > 
> > This can result in an incorrect application behavior if invalid
> > ol_flags/ptype are set, or memory corruptions if IND_ATTACHED_MBUF is
> > set in ol_flags.
> > 
> > Fixes: 081f7eae242e ("mlx5: process offload flags only when requested")
> > 
> > Signed-off-by: Maxime Leroy <maxime.leroy@6wind.com>
> > ---
> >  drivers/net/mlx5/mlx5_rxtx.c | 2 ++
> >  1 file changed, 2 insertions(+)
> > 
> > diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c
> > index 0c352f3f..4132fd74 100644
> > --- a/drivers/net/mlx5/mlx5_rxtx.c
> > +++ b/drivers/net/mlx5/mlx5_rxtx.c
> > @@ -1599,6 +1599,8 @@ mlx5_rx_burst(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n)
> >  			pkt = seg;
> >  			assert(len >= (rxq->crc_present << 2));
> >  			/* Update packet information. */
> > +			pkt->packet_type = 0;
> > +			pkt->ol_flags = 0;
> >  			if (rxq->csum | rxq->csum_l2tun | rxq->vlan_strip |
> >  			    rxq->crc_present) {
> >  				if (rxq->csum) {
> > -- 
> > 2.1.4
> > 
> 
> Acked-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
> 
Applied to dpdk-next-net/rel_16_07

/Bruce
  

Patch

diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c
index 0c352f3f..4132fd74 100644
--- a/drivers/net/mlx5/mlx5_rxtx.c
+++ b/drivers/net/mlx5/mlx5_rxtx.c
@@ -1599,6 +1599,8 @@  mlx5_rx_burst(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n)
 			pkt = seg;
 			assert(len >= (rxq->crc_present << 2));
 			/* Update packet information. */
+			pkt->packet_type = 0;
+			pkt->ol_flags = 0;
 			if (rxq->csum | rxq->csum_l2tun | rxq->vlan_strip |
 			    rxq->crc_present) {
 				if (rxq->csum) {