[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20120919155830.GA1456@darkstar>
Date: Wed, 19 Sep 2012 11:58:30 -0400
From: Jamie Gloudon <jamie.gloudon@...il.com>
To: Eric Dumazet <eric.dumazet@...il.com>
Cc: netdev@...r.kernel.org
Subject: Re: [PATCH net-next] net: more accurate network taps in transmit path
Just to report. This patch fixed the invalid tcp tx checksum issue via tap for me. Thanks!
On Wed, Sep 19, 2012 at 08:44:49AM +0200, Eric Dumazet wrote:
> From: Eric Dumazet <edumazet@...gle.com>
>
> dev_queue_xmit_nit() should be called right before ndo_start_xmit()
> calls or we might give wrong packet contents to taps users :
>
> Packet checksum can be changed, or packet can be linearized or
> segmented, and segments partially sent for the later case.
>
> Also a memory allocation can fail and packet never really hit the
> driver entry point.
>
> Reported-by: Jamie Gloudon <jamie.gloudon@...il.com>
> Signed-off-by: Eric Dumazet <edumazet@...gle.com>
> ---
> net/core/dev.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/net/core/dev.c b/net/core/dev.c
> index dcc673d..52cd1d7 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -2213,9 +2213,6 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
> if (dev->priv_flags & IFF_XMIT_DST_RELEASE)
> skb_dst_drop(skb);
>
> - if (!list_empty(&ptype_all))
> - dev_queue_xmit_nit(skb, dev);
> -
> features = netif_skb_features(skb);
>
> if (vlan_tx_tag_present(skb) &&
> @@ -2250,6 +2247,9 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
> }
> }
>
> + if (!list_empty(&ptype_all))
> + dev_queue_xmit_nit(skb, dev);
> +
> skb_len = skb->len;
> rc = ops->ndo_start_xmit(skb, dev);
> trace_net_dev_xmit(skb, rc, dev, skb_len);
> @@ -2272,6 +2272,9 @@ gso:
> if (dev->priv_flags & IFF_XMIT_DST_RELEASE)
> skb_dst_drop(nskb);
>
> + if (!list_empty(&ptype_all))
> + dev_queue_xmit_nit(nskb, dev);
> +
> skb_len = nskb->len;
> rc = ops->ndo_start_xmit(nskb, dev);
> trace_net_dev_xmit(nskb, rc, dev, skb_len);
>
>
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists