41 lines
1.6 KiB
Diff
41 lines
1.6 KiB
Diff
From: Vlad Yasevich <vyasevic@redhat.com>
|
|
Date: Mon, 14 Apr 2014 17:37:26 -0400
|
|
Subject: net: Start with correct mac_len in skb_network_protocol
|
|
Origin: https://git.kernel.org/linus/1e785f48d29a09b6cf96db7b49b6320dada332e1
|
|
|
|
Sometimes, when the packet arrives at skb_mac_gso_segment()
|
|
its skb->mac_len already accounts for some of the mac lenght
|
|
headers in the packet. This seems to happen when forwarding
|
|
through and OpenSSL tunnel.
|
|
|
|
When we start looking for any vlan headers in skb_network_protocol()
|
|
we seem to ignore any of the already known mac headers and start
|
|
with an ETH_HLEN. This results in an incorrect offset, dropped
|
|
TSO frames and general slowness of the connection.
|
|
|
|
We can start counting from the known skb->mac_len
|
|
and return at least that much if all mac level headers
|
|
are known and accounted for.
|
|
|
|
Fixes: 53d6471cef17262d3ad1c7ce8982a234244f68ec (net: Account for all vlan headers in skb_mac_gso_segment)
|
|
CC: Eric Dumazet <eric.dumazet@gmail.com>
|
|
CC: Daniel Borkman <dborkman@redhat.com>
|
|
Tested-by: Martin Filip <nexus+kernel@smoula.net>
|
|
Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
---
|
|
net/core/dev.c | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
--- a/net/core/dev.c
|
|
+++ b/net/core/dev.c
|
|
@@ -2289,7 +2289,7 @@ EXPORT_SYMBOL(skb_checksum_help);
|
|
__be16 skb_network_protocol(struct sk_buff *skb, int *depth)
|
|
{
|
|
__be16 type = skb->protocol;
|
|
- int vlan_depth = ETH_HLEN;
|
|
+ int vlan_depth = skb->mac_len;
|
|
|
|
/* Tunnel gso handlers can set protocol to ethernet. */
|
|
if (type == htons(ETH_P_TEB)) {
|