lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 09 Mar 2011 15:58:18 -0800 (PST) From: David Miller <davem@...emloft.net> To: akpm@...ux-foundation.org Cc: netdev@...r.kernel.org, bugzilla-daemon@...zilla.kernel.org, bugme-daemon@...zilla.kernel.org, slash@...auone-net.jp, ernstp@...il.com Subject: Re: [Bugme-new] [Bug 29252] New: IPv6 doesn't work in a kvm guest. Ok, the following should address both bugs, #29252 and #30462, please give it some testing. -------------------- ipv6: Don't create clones of nonexthop routes forever. Addresses https://bugzilla.kernel.org/show_bug.cgi?id=29252 Addresses https://bugzilla.kernel.org/show_bug.cgi?id=30462 In commit d80bc0fd262ef840ed4e82593ad6416fa1ba3fc4 ("ipv6: Always clone offlink routes.") we forced the kernel to always clone offlink routes. The reason we do that is to make sure we never bind an inetpeer to a prefixed route. The logic turned on here has existed in the tree for many years, but was always off due to a protecting CPP define. So perhaps it's no surprise that there is a logic bug here. The issue is that there is nothing that stops the cloning process. Every route call will find the same route in the same condition, reclone it, and insert. This causes two problems: 1) If the in6_rt_ins() call succeeds, we get tons of crap in the routing tree. 2) If the int6_rt_ins() call fails, we get no networking to that destination. We've had reports of both cases. End the loop and the failures by keying on the RTF_CACHE flag which will only be set in the clone routes. Reported-by: slash@...auone-net.jp Reported-by: Ernst Sjöstrand <ernstp@...il.com> Signed-off-by: David S. Miller <davem@...emloft.net> diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 904312e..8963635 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -739,8 +739,10 @@ restart: if (!rt->rt6i_nexthop && !(rt->rt6i_flags & RTF_NONEXTHOP)) nrt = rt6_alloc_cow(rt, &fl->fl6_dst, &fl->fl6_src); - else + else if (!(rt->rt6i_flags & RTF_CACHE)) nrt = rt6_alloc_clone(rt, &fl->fl6_dst); + else + goto out2; dst_release(&rt->dst); rt = nrt ? : net->ipv6.ip6_null_entry; -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists