--- /dev/null
+From c02bd115b1d25931159f89c7d9bf47a30f5d4b41 Mon Sep 17 00:00:00 2001
+From: Jakub Kicinski <kuba@kernel.org>
+Date: Wed, 9 Dec 2020 14:39:56 -0800
+Subject: Revert "geneve: pull IP header before ECN decapsulation"
+
+From: Jakub Kicinski <kuba@kernel.org>
+
+commit c02bd115b1d25931159f89c7d9bf47a30f5d4b41 upstream.
+
+This reverts commit 4179b00c04d1 ("geneve: pull IP header before ECN decapsulation").
+
+Eric says: "network header should have been pulled already before
+hitting geneve_rx()". Let's revert the syzbot fix since it's causing
+more harm than good, and revisit.
+
+Suggested-by: Eric Dumazet <edumazet@google.com>
+Reported-by: Jianlin Shi <jishi@redhat.com>
+Fixes: 4179b00c04d1 ("geneve: pull IP header before ECN decapsulation")
+Link: https://bugzilla.kernel.org/show_bug.cgi?id=210569
+Link: https://lore.kernel.org/netdev/CANn89iJVWfb=2i7oU1=D55rOyQnBbbikf+Mc6XHMkY7YX-yGEw@mail.gmail.com/
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/geneve.c | 20 ++++----------------
+ 1 file changed, 4 insertions(+), 16 deletions(-)
+
+--- a/drivers/net/geneve.c
++++ b/drivers/net/geneve.c
+@@ -258,21 +258,11 @@ static void geneve_rx(struct geneve_dev
+ skb_dst_set(skb, &tun_dst->dst);
+
+ /* Ignore packet loops (and multicast echo) */
+- if (ether_addr_equal(eth_hdr(skb)->h_source, geneve->dev->dev_addr))
+- goto rx_error;
+-
+- switch (skb_protocol(skb, true)) {
+- case htons(ETH_P_IP):
+- if (pskb_may_pull(skb, sizeof(struct iphdr)))
+- goto rx_error;
+- break;
+- case htons(ETH_P_IPV6):
+- if (pskb_may_pull(skb, sizeof(struct ipv6hdr)))
+- goto rx_error;
+- break;
+- default:
+- goto rx_error;
++ if (ether_addr_equal(eth_hdr(skb)->h_source, geneve->dev->dev_addr)) {
++ geneve->dev->stats.rx_errors++;
++ goto drop;
+ }
++
+ oiph = skb_network_header(skb);
+ skb_reset_network_header(skb);
+
+@@ -313,8 +303,6 @@ static void geneve_rx(struct geneve_dev
+ u64_stats_update_end(&stats->syncp);
+ }
+ return;
+-rx_error:
+- geneve->dev->stats.rx_errors++;
+ drop:
+ /* Consume bad packet */
+ kfree_skb(skb);