summaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorJesse Gross <jesse@kernel.org>2016-03-19 09:32:01 -0700
committerBen Hutchings <ben@decadent.org.uk>2016-05-01 00:06:03 +0200
commit23cca87ff225c1c7327a715db1bcc98a241b0efa (patch)
tree5bff87886e7a873dc66a27e2bbfffce9e3f40a32 /net/core
parent8c487c211ecf5e6440b0a3d88f4b0dd6cfa0e304 (diff)
downloadlinux-stable-23cca87ff225c1c7327a715db1bcc98a241b0efa.tar.gz
linux-stable-23cca87ff225c1c7327a715db1bcc98a241b0efa.tar.bz2
linux-stable-23cca87ff225c1c7327a715db1bcc98a241b0efa.zip
tunnels: Don't apply GRO to multiple layers of encapsulation.
commit fac8e0f579695a3ecbc4d3cac369139d7f819971 upstream. When drivers express support for TSO of encapsulated packets, they only mean that they can do it for one layer of encapsulation. Supporting additional levels would mean updating, at a minimum, more IP length fields and they are unaware of this. No encapsulation device expresses support for handling offloaded encapsulated packets, so we won't generate these types of frames in the transmit path. However, GRO doesn't have a check for multiple levels of encapsulation and will attempt to build them. UDP tunnel GRO actually does prevent this situation but it only handles multiple UDP tunnels stacked on top of each other. This generalizes that solution to prevent any kind of tunnel stacking that would cause problems. Fixes: bf5a755f ("net-gre-gro: Add GRE support to the GRO stack") Signed-off-by: Jesse Gross <jesse@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net> [bwh: Backported to 3.16: - Drop the ipip and sit cases - Adjust context] Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'net/core')
-rw-r--r--net/core/dev.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index e12823e68bb0..75be7e226268 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -3974,7 +3974,7 @@ static enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buff
NAPI_GRO_CB(skb)->same_flow = 0;
NAPI_GRO_CB(skb)->flush = 0;
NAPI_GRO_CB(skb)->free = 0;
- NAPI_GRO_CB(skb)->udp_mark = 0;
+ NAPI_GRO_CB(skb)->encap_mark = 0;
pp = ptype->callbacks.gro_receive(&napi->gro_list, skb);
break;