]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/3.8.4/net-ipv6-don-t-purge-default-router-if-accept_ra-2.patch
Linux 4.14.95
[thirdparty/kernel/stable-queue.git] / releases / 3.8.4 / net-ipv6-don-t-purge-default-router-if-accept_ra-2.patch
CommitLineData
8002656c
GKH
1From 050003433737f47a3e2bc7e46eaf5a1269a7ac02 Mon Sep 17 00:00:00 2001
2From: Lorenzo Colitti <lorenzo@google.com>
3Date: Sun, 3 Mar 2013 20:46:46 +0000
4Subject: net: ipv6: Don't purge default router if accept_ra=2
5
6
7From: Lorenzo Colitti <lorenzo@google.com>
8
9[ Upstream commit 3e8b0ac3e41e3c882222a5522d5df7212438ab51 ]
10
11Setting net.ipv6.conf.<interface>.accept_ra=2 causes the kernel
12to accept RAs even when forwarding is enabled. However, enabling
13forwarding purges all default routes on the system, breaking
14connectivity until the next RA is received. Fix this by not
15purging default routes on interfaces that have accept_ra=2.
16
17Signed-off-by: Lorenzo Colitti <lorenzo@google.com>
18Acked-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
19Acked-by: Eric Dumazet <edumazet@google.com>
20Signed-off-by: David S. Miller <davem@davemloft.net>
21Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
22---
23 net/ipv6/route.c | 3 ++-
24 1 file changed, 2 insertions(+), 1 deletion(-)
25
26--- a/net/ipv6/route.c
27+++ b/net/ipv6/route.c
28@@ -1990,7 +1990,8 @@ void rt6_purge_dflt_routers(struct net *
29 restart:
30 read_lock_bh(&table->tb6_lock);
31 for (rt = table->tb6_root.leaf; rt; rt = rt->dst.rt6_next) {
32- if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) {
33+ if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF) &&
34+ (!rt->rt6i_idev || rt->rt6i_idev->cnf.accept_ra != 2)) {
35 dst_hold(&rt->dst);
36 read_unlock_bh(&table->tb6_lock);
37 ip6_del_rt(rt);