Browse Source

net/veth: Fix packet checksumming

We can't change ip_summed from CHECKSUM_PARTIAL to CHECKSUM_NONE
or CHECKSUM_UNNECESSARY because checksum in packet's headers is
not valid and will cause invalid checksum when frame is forwarded.

Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Signed-off-by: David S. Miller <davem@davemloft.net>
Michał Mirosław 14 years ago
parent
commit
0b7967503d
1 changed files with 3 additions and 1 deletions
  1. 3 1
      drivers/net/veth.c

+ 3 - 1
drivers/net/veth.c

@@ -166,7 +166,9 @@ static netdev_tx_t veth_xmit(struct sk_buff *skb, struct net_device *dev)
 	if (!(rcv->flags & IFF_UP))
 	if (!(rcv->flags & IFF_UP))
 		goto tx_drop;
 		goto tx_drop;
 
 
-	if (dev->features & NETIF_F_NO_CSUM)
+	/* don't change ip_summed == CHECKSUM_PARTIAL, as that
+	   will cause bad checksum on forwarded packets */
+	if (skb->ip_summed == CHECKSUM_NONE)
 		skb->ip_summed = rcv_priv->ip_summed;
 		skb->ip_summed = rcv_priv->ip_summed;
 
 
 	length = skb->len + ETH_HLEN;
 	length = skb->len + ETH_HLEN;