[IPV4]: Reset scope when changing address
authorBjorn Mork <bjorn@mork.no>
Wed, 27 Feb 2008 02:17:53 +0000 (18:17 -0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 27 Feb 2008 02:42:41 +0000 (18:42 -0800)
This bug did bite at least one user, who did have to resort to rebooting
the system after an "ifconfig eth0 127.0.0.1" typo.

Deleting the address and adding a new is a less intrusive workaround.
But I still beleive this is a bug that should be fixed.  Some way or
another.

Another possibility would be to remove the scope mangling based on
address.  This will always be incomplete (are 127/8 the only address
space with host scope requirements?)

We set the scope to RT_SCOPE_HOST if an IPv4 interface is configured
with a loopback address (127/8).  The scope is never reset, and will
remain set to RT_SCOPE_HOST after changing the address. This patch
resets the scope if the address is changed again, to restore normal
functionality.

Signed-off-by: Bjorn Mork <bjorn@mork.no>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/devinet.c

index f282b26f63eb7c20d0b456e104b1a8772b009bb8..87490f7bb0f72a47db2a3e8a28ce3816cd236032 100644 (file)
@@ -752,6 +752,7 @@ int devinet_ioctl(unsigned int cmd, void __user *arg)
                        inet_del_ifa(in_dev, ifap, 0);
                        ifa->ifa_broadcast = 0;
                        ifa->ifa_anycast = 0;
+                       ifa->ifa_scope = 0;
                }
 
                ifa->ifa_address = ifa->ifa_local = sin->sin_addr.s_addr;