]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.19
authorSasha Levin <sashal@kernel.org>
Mon, 23 Mar 2020 20:22:06 +0000 (16:22 -0400)
committerSasha Levin <sashal@kernel.org>
Mon, 23 Mar 2020 20:22:06 +0000 (16:22 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.19/revert-ipv6-fix-handling-of-lla-with-vrf-and-sockets.patch [new file with mode: 0644]
queue-4.19/revert-vrf-mark-skb-for-multicast-or-link-local-as-e.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/revert-ipv6-fix-handling-of-lla-with-vrf-and-sockets.patch b/queue-4.19/revert-ipv6-fix-handling-of-lla-with-vrf-and-sockets.patch
new file mode 100644 (file)
index 0000000..48276bc
--- /dev/null
@@ -0,0 +1,38 @@
+From d4f23380517489284e79e2aaf26b24be53b3ca69 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 23 Mar 2020 16:20:43 -0400
+Subject: Revert "ipv6: Fix handling of LLA with VRF and sockets bound to VRF"
+
+This reverts commit 2b3541ffdd05198b329d21920a0f606009a1058b.
+
+This patch shouldn't have been backported to 4.19.
+
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ net/ipv6/tcp_ipv6.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
+index c5f4e89b6ff30..7b0c2498f461b 100644
+--- a/net/ipv6/tcp_ipv6.c
++++ b/net/ipv6/tcp_ipv6.c
+@@ -734,7 +734,6 @@ static void tcp_v6_init_req(struct request_sock *req,
+                           const struct sock *sk_listener,
+                           struct sk_buff *skb)
+ {
+-      bool l3_slave = ipv6_l3mdev_skb(TCP_SKB_CB(skb)->header.h6.flags);
+       struct inet_request_sock *ireq = inet_rsk(req);
+       const struct ipv6_pinfo *np = inet6_sk(sk_listener);
+@@ -742,7 +741,7 @@ static void tcp_v6_init_req(struct request_sock *req,
+       ireq->ir_v6_loc_addr = ipv6_hdr(skb)->daddr;
+       /* So that link locals have meaning */
+-      if ((!sk_listener->sk_bound_dev_if || l3_slave) &&
++      if (!sk_listener->sk_bound_dev_if &&
+           ipv6_addr_type(&ireq->ir_v6_rmt_addr) & IPV6_ADDR_LINKLOCAL)
+               ireq->ir_iif = tcp_v6_iif(skb);
+-- 
+2.20.1
+
diff --git a/queue-4.19/revert-vrf-mark-skb-for-multicast-or-link-local-as-e.patch b/queue-4.19/revert-vrf-mark-skb-for-multicast-or-link-local-as-e.patch
new file mode 100644 (file)
index 0000000..05309ac
--- /dev/null
@@ -0,0 +1,55 @@
+From c080601a78f6b2982084377e0a3c195c8392be19 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Mon, 23 Mar 2020 16:19:51 -0400
+Subject: Revert "vrf: mark skb for multicast or link-local as enslaved to VRF"
+
+This reverts commit 91c5f99d131ed3b231aaef7d4ed6799085b095a3.
+
+This patch shouldn't have been backported to 4.19.
+
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/net/vrf.c | 19 ++++++++++---------
+ 1 file changed, 10 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
+index 7f5ee6bb44300..9f895083bc0aa 100644
+--- a/drivers/net/vrf.c
++++ b/drivers/net/vrf.c
+@@ -993,23 +993,24 @@ static struct sk_buff *vrf_ip6_rcv(struct net_device *vrf_dev,
+                                  struct sk_buff *skb)
+ {
+       int orig_iif = skb->skb_iif;
+-      bool need_strict = rt6_need_strict(&ipv6_hdr(skb)->daddr);
+-      bool is_ndisc = ipv6_ndisc_frame(skb);
++      bool need_strict;
+-      /* loopback, multicast & non-ND link-local traffic; do not push through
+-       * packet taps again. Reset pkt_type for upper layers to process skb
++      /* loopback traffic; do not push through packet taps again.
++       * Reset pkt_type for upper layers to process skb
+        */
+-      if (skb->pkt_type == PACKET_LOOPBACK || (need_strict && !is_ndisc)) {
++      if (skb->pkt_type == PACKET_LOOPBACK) {
+               skb->dev = vrf_dev;
+               skb->skb_iif = vrf_dev->ifindex;
+               IP6CB(skb)->flags |= IP6SKB_L3SLAVE;
+-              if (skb->pkt_type == PACKET_LOOPBACK)
+-                      skb->pkt_type = PACKET_HOST;
++              skb->pkt_type = PACKET_HOST;
+               goto out;
+       }
+-      /* if packet is NDISC then keep the ingress interface */
+-      if (!is_ndisc) {
++      /* if packet is NDISC or addressed to multicast or link-local
++       * then keep the ingress interface
++       */
++      need_strict = rt6_need_strict(&ipv6_hdr(skb)->daddr);
++      if (!ipv6_ndisc_frame(skb) && !need_strict) {
+               vrf_rx_stats(vrf_dev, skb->len);
+               skb->dev = vrf_dev;
+               skb->skb_iif = vrf_dev->ifindex;
+-- 
+2.20.1
+
index 56dc332d183860dc580b6bf1f3acd58d3338e56b..b017b0c0ef8398bfa1656e0e7a50c89d06786746 100644 (file)
@@ -53,3 +53,5 @@ usb-cdc-acm-fix-close_delay-and-closing_wait-units-i.patch
 usb-cdc-acm-fix-rounding-error-in-tiocsserial.patch
 iio-light-vcnl4000-update-sampling-periods-for-vcnl4.patch
 kbuild-disable-wpointer-to-enum-cast.patch
+revert-vrf-mark-skb-for-multicast-or-link-local-as-e.patch
+revert-ipv6-fix-handling-of-lla-with-vrf-and-sockets.patch