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: Tue, 3 Feb 2015 13:01:41 +0100 From: Steffen Klassert <steffen.klassert@...unet.com> To: shengyong <shengyong1@...wei.com> CC: <davem@...emloft.net>, <netdev@...r.kernel.org>, <yangyingliang@...wei.com>, <hannes@...hat.com> Subject: Re: Question: should local address be expired when updating PMTU? On Tue, Feb 03, 2015 at 06:54:19PM +0800, shengyong wrote: > > > 在 2015/2/3 17:28, Steffen Klassert 写道: > > On Mon, Feb 02, 2015 at 04:20:24PM +0800, shengyong wrote: > > > > We first need to find out why you receive this Packet Too Big message, > The packet is sent by a commercial-off-the-shelf testcase, and I can reproduce the > situation by using scapy and creating a packet as the following: > > $ cat packet-too-big.py > #!/usr/bin/python > > from scapy.all import * > > # fe80::800:27ff:fe00:0 is linklocal addr of PC > # fe80::a00:27ff:fe1a:e2a0 is linklocal addr of VM > base=IPv6(src='fe80::800:27ff:fe00:0',dst='fe80::a00:27ff:fe1a:e2a0') > pkt_too_big=ICMPv6PacketTooBig(mtu=1024) > ext_base=IPv6(src='fe80::a00:27ff:fe1a:e2a0',dst='fe80::a00:27ff:fe1a:e2a0',plen=24) > ext_nd_na=ICMPv6ND_NA() > > packet=base/pkt_too_big/ext_base/ext_nd_na > send(packet) So it is not a valid pmtu update, this make life easier. Can you please test the patch below (compile tested only)? This should fix your problem, and in combination with the two patches I sent out last week, it should cure the whole 'expiring of uncached routes' problem. diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 49596535..4ccfb9c 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -1156,7 +1156,8 @@ static void ip6_rt_update_pmtu(struct dst_entry *dst, struct sock *sk, struct rt6_info *rt6 = (struct rt6_info *)dst; dst_confirm(dst); - if (mtu < dst_mtu(dst) && rt6->rt6i_dst.plen == 128) { + if (mtu < dst_mtu(dst) && rt6->rt6i_dst.plen == 128 && + (rt6->rt6i_flags & RTF_CACHE)) { struct net *net = dev_net(dst->dev); rt6->rt6i_flags |= RTF_MODIFIED; -- 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