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

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

diff --git a/queue-4.19/revert-geneve-pull-ip-header-before-ecn-decapsulation.patch b/queue-4.19/revert-geneve-pull-ip-header-before-ecn-decapsulation.patch
new file mode 100644 (file)
index 0000000..9ddd726
--- /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
+@@ -256,21 +256,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);
+@@ -311,8 +301,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 0304a505167b0e2784cac4cf4ffefa7d2f1241c6..bc475b240318c5d3d4d7b377cd8d022eefa31228 100644 (file)
@@ -37,3 +37,4 @@ dm-writecache-remove-bug-and-fail-gracefully-instead.patch
 input-i8042-fix-error-return-code-in-i8042_setup_aux.patch
 netfilter-nf_tables-avoid-false-postive-lockdep-splat.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