Skip to contentSkip to conversation

Back-porting request

PATCH Stephen Suryaputra 4 participants 4 messages Jul 29, 2019 – Nov 21, 2019

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

Hello,

I'm requesting this commit to be back-ported to v4.14:
---
commit 5b18f1289808fee5d04a7e6ecf200189f41a4db6

Author: Stephen Suryaputra <[email protected]>
Date:   Wed Jun 26 02:21:16 2019 -0400

ipv4: reset rt_iif for recirculated mcast/bcast out pkts

Multicast or broadcast egress packets have rt_iif set to the oif. These packets might be recirculated back as input and lookup to the raw sockets may fail because they are bound to the incoming interface (skb_iif). If rt_iif is not zero, during the lookup, inet_iif() function returns rt_iif instead of skb_iif. Hence, the lookup fails.

v2: Make it non vrf specific (David Ahern). Reword the changelog to
reflect it.

---

We found the issue in that release and the above commit is on linux-stable. On the discussion behind this commit, please see:
https://www.spinics.net/lists/netdev/msg581045.html

I think after the following diff is needed on top of the above commit for v4.14:

---

net/ipv4/route.c +2 -5
index 4d85a4fdfdb0..ad2718c1624e 100644
@@ -1623,11 +1623,8 @@ struct rtable *rt_dst_clone(struct net_device *dev, struct rtable *rt)
 		new_rt->rt_iif = rt->rt_iif;
 		new_rt->rt_pmtu = rt->rt_pmtu;
 		new_rt->rt_mtu_locked = rt->rt_mtu_locked;
-		new_rt->rt_gw_family = rt->rt_gw_family;
-		if (rt->rt_gw_family == AF_INET)
-			new_rt->rt_gw4 = rt->rt_gw4;
-		else if (rt->rt_gw_family == AF_INET6)
-			new_rt->rt_gw6 = rt->rt_gw6;
+		new_rt->rt_gateway = rt->rt_gateway;
+		new_rt->rt_table_id = rt->rt_table_id;
 		INIT_LIST_HEAD(&new_rt->rt_uncached);
 
 		new_rt->dst.flags |= DST_HOST;

---

Thank you,

Stephen.

maintainer
#1 lore raw
Quoted 51 lines · Stephen Suryaputra

Hello,

I'm requesting this commit to be back-ported to v4.14:
---
commit 5b18f1289808fee5d04a7e6ecf200189f41a4db6

Author: Stephen Suryaputra <[email protected]>
Date:   Wed Jun 26 02:21:16 2019 -0400

ipv4: reset rt_iif for recirculated mcast/bcast out pkts

Multicast or broadcast egress packets have rt_iif set to the oif. These packets might be recirculated back as input and lookup to the raw sockets may fail because they are bound to the incoming interface (skb_iif). If rt_iif is not zero, during the lookup, inet_iif() function returns rt_iif instead of skb_iif. Hence, the lookup fails.

v2: Make it non vrf specific (David Ahern). Reword the changelog to
reflect it.

---

We found the issue in that release and the above commit is on linux-stable. On the discussion behind this commit, please see:
https://www.spinics.net/lists/netdev/msg581045.html

I think after the following diff is needed on top of the above commit for v4.14:

---

net/ipv4/route.c +2 -6
index 4d85a4fdfdb0..ad2718c1624e 100644
@@ -1623,11 +1623,8 @@ struct rtable *rt_dst_clone(struct net_device *dev, struct rtable *rt)
 		new_rt->rt_iif = rt->rt_iif;
 		new_rt->rt_pmtu = rt->rt_pmtu;
 		new_rt->rt_mtu_locked = rt->rt_mtu_locked;
-		new_rt->rt_gw_family = rt->rt_gw_family;
-		if (rt->rt_gw_family == AF_INET)
-			new_rt->rt_gw4 = rt->rt_gw4;
-		else if (rt->rt_gw_family == AF_INET6)
-			new_rt->rt_gw6 = rt->rt_gw6;
+		new_rt->rt_gateway = rt->rt_gateway;
+		new_rt->rt_table_id = rt->rt_table_id;
 		INIT_LIST_HEAD(&new_rt->rt_uncached);
 
 		new_rt->dst.flags |= DST_HOST;
---
Quoted 1 line

Thank you,

For networking patches to be applied to the stable kernel tree(s), please read:
https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
for how to do this properly.

There is a section for how to do this for networking patches as they are accepted a bit differently from other patches.

thanks,

greg k-h

maintainer
#2 lore raw
Quoted 59 lines · Greg KH
Quoted 51 lines · Stephen Suryaputra

Hello,

I'm requesting this commit to be back-ported to v4.14:
---
commit 5b18f1289808fee5d04a7e6ecf200189f41a4db6

Author: Stephen Suryaputra <[email protected]>
Date:   Wed Jun 26 02:21:16 2019 -0400

ipv4: reset rt_iif for recirculated mcast/bcast out pkts

Multicast or broadcast egress packets have rt_iif set to the oif. These packets might be recirculated back as input and lookup to the raw sockets may fail because they are bound to the incoming interface (skb_iif). If rt_iif is not zero, during the lookup, inet_iif() function returns rt_iif instead of skb_iif. Hence, the lookup fails.

v2: Make it non vrf specific (David Ahern). Reword the changelog to
reflect it.

---

We found the issue in that release and the above commit is on linux-stable. On the discussion behind this commit, please see:
https://www.spinics.net/lists/netdev/msg581045.html

I think after the following diff is needed on top of the above commit for v4.14:

---

net/ipv4/route.c +2 -6
index 4d85a4fdfdb0..ad2718c1624e 100644
@@ -1623,11 +1623,8 @@ struct rtable *rt_dst_clone(struct net_device *dev, struct rtable *rt)
 		new_rt->rt_iif = rt->rt_iif;
 		new_rt->rt_pmtu = rt->rt_pmtu;
 		new_rt->rt_mtu_locked = rt->rt_mtu_locked;
-		new_rt->rt_gw_family = rt->rt_gw_family;
-		if (rt->rt_gw_family == AF_INET)
-			new_rt->rt_gw4 = rt->rt_gw4;
-		else if (rt->rt_gw_family == AF_INET6)
-			new_rt->rt_gw6 = rt->rt_gw6;
+		new_rt->rt_gateway = rt->rt_gateway;
+		new_rt->rt_table_id = rt->rt_table_id;
 		INIT_LIST_HEAD(&new_rt->rt_uncached);
 
 		new_rt->dst.flags |= DST_HOST;
---
Quoted 1 line

Thank you,

For networking patches to be applied to the stable kernel tree(s), please read:
https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
for how to do this properly.

Quoted 2 lines

There is a section for how to do this for networking patches as they are accepted a bit differently from other patches.

To clarify a bit more here: technically you're asking for a patch to be included in 4.14, which isn't one of the "last two stable releases", so that document will tell you to send that patch directly to us.

However, this patch isn't in 4.19 either, which is still Dave's domain, and we can't take it in 4.14 if it's not in 4.19 (we don't want to introduce regressions for people who are upgrading their kernels), so this will still need to go through Dave.

--
Thanks,
Sasha

#3 lore raw
In reply to Stephen Suryaputra
Quoted 40 lines · Stephen Suryaputra

Hello,

I'm requesting this commit to be back-ported to v4.14:
---
commit 5b18f1289808fee5d04a7e6ecf200189f41a4db6

Author: Stephen Suryaputra <[email protected]>
Date:   Wed Jun 26 02:21:16 2019 -0400

ipv4: reset rt_iif for recirculated mcast/bcast out pkts

Multicast or broadcast egress packets have rt_iif set to the oif. These packets might be recirculated back as input and lookup to the raw sockets may fail because they are bound to the incoming interface (skb_iif). If rt_iif is not zero, during the lookup, inet_iif() function returns rt_iif instead of skb_iif. Hence, the lookup fails.

v2: Make it non vrf specific (David Ahern). Reword the changelog to
reflect it.

---

We found the issue in that release and the above commit is on linux-stable. On the discussion behind this commit, please see:
https://www.spinics.net/lists/netdev/msg581045.html

I think after the following diff is needed on top of the above commit for v4.14:

---

net/ipv4/route.c +0 -1
index 4d85a4fdfdb0..ad2718c1624e 100644
@@ -1623,11 +1623,8 @@ struct rtable *rt_dst_clone(struct net_device *dev, struct rtable *rt)
 		new_rt->rt_iif = rt->rt_iif;
 		new_rt->rt_pmtu = rt->rt_pmtu;
 		new_rt->rt_mtu_locked = rt->rt_mtu_locked;
-		new_rt->rt_gw_family = rt->rt_gw_family;

net/ipv4/route.c struct rtable *rt_dst_clone(struct net_device *dev, struct rtable *rt)

Quoted 10 lines
net/ipv4/route.c +2 -5
-		if (rt->rt_gw_family == AF_INET)
-			new_rt->rt_gw4 = rt->rt_gw4;
-		else if (rt->rt_gw_family == AF_INET6)
-			new_rt->rt_gw6 = rt->rt_gw6;
+		new_rt->rt_gateway = rt->rt_gateway;
+		new_rt->rt_table_id = rt->rt_table_id;
 		INIT_LIST_HEAD(&new_rt->rt_uncached);
 
 		new_rt->dst.flags |= DST_HOST;
---

This only worked for 4.14, this also needs to go to 4.19. Can you provide a working backport for both trees so that I can apply it? I'll go drop the one I added, as it breaks the build :(

thanks,

greg k-h