New: Route advmss copied to ALL routes when interface MTU changes
Subsystems (3)
A message that is not in the archive (sent off-list or not yet received): [email protected]/
Quoted 1 line · On Sat, 14 Jul 2007 15:34:31 -0700 (PDT) [email protected] wrote:
It is unclear which kernel version this applies to?
Quoted 49 lines
Summary: Route advmss copied to ALL routes when interface MTU
changes
Product: Networking
Version: 2.5
Platform: All
OS/Version: Linux
Tree: Mainline
Status: NEW
Severity: normal
Priority: P1
Component: IPV6
AssignedTo: [email protected]
ReportedBy: [email protected]Steps to reproduce:
1. Have multiple network devices and routes for them with standard (low, i.e. 1500) MTUs and default ADVMSS (e.g. 1440)
2. Change the MTU on one of them to something high (e.g. 7200)
3. The ADVMSS is incorrectly set for ALL routes based on the new MTU of the interface that changed.Note: if addrconf is running then the ADVMSS will be reset on the next RA, so this will impede attempts to reproduce.
# ip -6 r fe80::/64 dev sit0 metric 256 expires 4481744sec mtu 1480 advmss 1440 hoplimit 4294967295 fe80::/64 dev ppp0 metric 256 expires 19071345sec mtu 1500 advmss 1440 hoplimit 4294967295 fe80::/64 dev eth0 metric 256 expires 19072430sec mtu 1500 advmss 1440 hoplimit 4294967295 default dev ppp0 metric 1024 expires 19071347sec mtu 1500 advmss 1440 hoplimit 4294967295# ifconfig eth0 mtu 7200# ip -6 r fe80::/64 dev sit0 metric 256 expires 4481732sec mtu 1480 advmss 7140 hoplimit 4294967295 <-- wrong fe80::/64 dev ppp0 metric 256 expires 19071334sec mtu 1500 advmss 7140 hoplimit 4294967295 <-- wrong fe80::/64 dev eth0 metric 256 expires 19072419sec mtu 7200 advmss 7140 hoplimit 4294967295 <-- correctExplicitly setting the MTU on these other routes (although this is not possible without having to add another route due to bug 8755) automatically sets ADVMSS appropriately.
Quoted 5 lines · Andrew Morton
Quoted 1 line · On Sat, 14 Jul 2007 15:34:31 -0700 (PDT) [email protected] wrote:
It is unclear which kernel version this applies to?
Linus' 2.6 tree, as of Mon Jul 9 15:50:56 2007 -0700
For some reason it says "Version: 2.5" on the email and "Version: " on the website...
Quoted 50 lines
Quoted 50 lines
Summary: Route advmss copied to ALL routes when interface MTU
changes
Product: Networking
Version: 2.5
Platform: All
OS/Version: Linux
Tree: Mainline
Status: NEW
Severity: normal
Priority: P1
Component: IPV6
AssignedTo: [email protected]
ReportedBy: [email protected]Steps to reproduce:
1. Have multiple network devices and routes for them with standard (low, i.e. 1500) MTUs and default ADVMSS (e.g. 1440)
2. Change the MTU on one of them to something high (e.g. 7200)
3. The ADVMSS is incorrectly set for ALL routes based on the new MTU of the interface that changed.Note: if addrconf is running then the ADVMSS will be reset on the next RA, so this will impede attempts to reproduce.
# ip -6 r fe80::/64 dev sit0 metric 256 expires 4481744sec mtu 1480 advmss 1440 hoplimit 4294967295 fe80::/64 dev ppp0 metric 256 expires 19071345sec mtu 1500 advmss 1440 hoplimit 4294967295 fe80::/64 dev eth0 metric 256 expires 19072430sec mtu 1500 advmss 1440 hoplimit 4294967295 default dev ppp0 metric 1024 expires 19071347sec mtu 1500 advmss 1440 hoplimit 4294967295# ifconfig eth0 mtu 7200# ip -6 r fe80::/64 dev sit0 metric 256 expires 4481732sec mtu 1480 advmss 7140 hoplimit 4294967295 <-- wrong fe80::/64 dev ppp0 metric 256 expires 19071334sec mtu 1500 advmss 7140 hoplimit 4294967295 <-- wrong fe80::/64 dev eth0 metric 256 expires 19072419sec mtu 7200 advmss 7140 hoplimit 4294967295 <-- correctExplicitly setting the MTU on these other routes (although this is not possible without having to add another route due to bug 8755) automatically sets ADVMSS appropriately.
Signature · 1 line
Simon Arlott
PATCH 1/1 ] IPv6: Don't update ADVMSS on routes where the MTU is not also updated
The ADVMSS value was incorrectly updated for ALL routes when the MTU is updated because it's outside the effect of the if statement's condition.
---
This fixes http://bugzilla.kernel.org/show_bug.cgi?id=8756
net/ipv6/route.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
net/ipv6/route.c +3 -2
@@ -1983,9 +1983,10 @@ static int rt6_mtu_change_route(struct rt6_info *rt, void *p_arg) !dst_metric_locked (&rt->u.dst,RTAX_MTU ) && (dst_mtu (&rt->u.dst) > arg->mtu || (dst_mtu (&rt->u.dst) < arg->mtu && - dst_mtu(&rt->u.dst) == idev->cnf.mtu6))) + dst_mtu(&rt->u.dst) == idev->cnf.mtu6))) { rt->u.dst.metrics[RTAX_MTU-1] = arg->mtu; - rt->u.dst.metrics[RTAX_ADVMSS -1 ] =ipv6_advmss (arg->mtu); + rt->u.dst.metrics[RTAX_ADVMSS -1 ] =ipv6_advmss (arg->mtu); + }return 0 ; }
Signature · 4 lines
1.5.0.1 -- Simon Arlott
David Miller
maintainerRe: [PATCH [Bug 8756]] IPv6: Don't update ADVMSS on routes where the MTU is not also updated
From: Simon Arlott <[email protected]>
Date: Mon, 23 Jul 2007 20:25:45 +0100
Quoted 5 lines
The ADVMSS value was incorrectly updated for ALL routes when the MTU is updated because it's outside the effect of the if statement's condition.
Signed-off-by Simon Arlott <[email protected]>
Thanks for fixing this bug Simon, patch applied.