]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 10 Dec 2020 15:37:53 +0000 (16:37 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 10 Dec 2020 15:37:53 +0000 (16:37 +0100)
added patches:
revert-geneve-pull-ip-header-before-ecn-decapsulation.patch

queue-5.9/revert-geneve-pull-ip-header-before-ecn-decapsulation.patch [new file with mode: 0644]
queue-5.9/series

diff --git a/queue-5.9/revert-geneve-pull-ip-header-before-ecn-decapsulation.patch b/queue-5.9/revert-geneve-pull-ip-header-before-ecn-decapsulation.patch
new file mode 100644 (file)
index 0000000..a18cadc
--- /dev/null
@@ -0,0 +1,64 @@
+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);
index 69e457a12e55f46f6e34a2509104bfb225bf0708..892c3355da278cfd7095a479d10e069e742056b4 100644 (file)
@@ -73,3 +73,4 @@ netfilter-nf_tables-avoid-false-postive-lockdep-splat.patch
 netfilter-nftables_offload-set-address-type-in-control-dissector.patch
 netfilter-nftables_offload-build-mask-based-from-the-matching-bytes.patch
 x86-insn-eval-use-new-for_each_insn_prefix-macro-to-loop-over-prefixes-bytes.patch
+revert-geneve-pull-ip-header-before-ecn-decapsulation.patch