summaryrefslogtreecommitdiffstats
path: root/net/ipv4/gre_offload.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2016-05-10 16:06:04 +0200
committerTakashi Iwai <tiwai@suse.de>2016-05-10 16:06:04 +0200
commit2e00fde5c6ed8535244332ebb55e881baa54ae46 (patch)
treef578e02ef1dc6e59630f09404bb2f58500876811 /net/ipv4/gre_offload.c
parent39f0ccde3624e7cf882faccf7f72a47b7a763bfb (diff)
parent3231e2053eaeee70bdfb216a78a30f11e88e2243 (diff)
downloadblackbird-op-linux-2e00fde5c6ed8535244332ebb55e881baa54ae46.tar.gz
blackbird-op-linux-2e00fde5c6ed8535244332ebb55e881baa54ae46.zip
Merge branch 'for-linus' into for-next
Diffstat (limited to 'net/ipv4/gre_offload.c')
-rw-r--r--net/ipv4/gre_offload.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/net/ipv4/gre_offload.c b/net/ipv4/gre_offload.c
index c47539d04b88..6a5bd4317866 100644
--- a/net/ipv4/gre_offload.c
+++ b/net/ipv4/gre_offload.c
@@ -150,6 +150,14 @@ static struct sk_buff **gre_gro_receive(struct sk_buff **head,
if ((greh->flags & ~(GRE_KEY|GRE_CSUM)) != 0)
goto out;
+ /* We can only support GRE_CSUM if we can track the location of
+ * the GRE header. In the case of FOU/GUE we cannot because the
+ * outer UDP header displaces the GRE header leaving us in a state
+ * of limbo.
+ */
+ if ((greh->flags & GRE_CSUM) && NAPI_GRO_CB(skb)->is_fou)
+ goto out;
+
type = greh->protocol;
rcu_read_lock();
OpenPOWER on IntegriCloud