--- zzzz-none-000/linux-2.6.32.61/net/ipv4/devinet.c 2013-06-10 09:43:48.000000000 +0000 +++ ar10-7272-687/linux-2.6.32.61/net/ipv4/devinet.c 2015-07-14 09:41:24.000000000 +0000 @@ -68,6 +68,7 @@ [NET_IPV4_CONF_SEND_REDIRECTS - 1] = 1, [NET_IPV4_CONF_SECURE_REDIRECTS - 1] = 1, [NET_IPV4_CONF_SHARED_MEDIA - 1] = 1, + [NET_IPV4_CONF_IFADDR_RTABLE - 1] = RT_TABLE_MAIN, }, }; @@ -78,6 +79,7 @@ [NET_IPV4_CONF_SECURE_REDIRECTS - 1] = 1, [NET_IPV4_CONF_SHARED_MEDIA - 1] = 1, [NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE - 1] = 1, + [NET_IPV4_CONF_IFADDR_RTABLE - 1] = RT_TABLE_MAIN, }, }; @@ -590,6 +592,7 @@ char *colon; int ret = -EFAULT; int tryaddrmatch = 0; + int in_offload_lock = 0; /* * Fetch the caller's info block into kernel space @@ -643,6 +646,7 @@ goto out; } + in_offload_lock = acquire_offload_lock(net, ifr.ifr_name); rtnl_lock(); ret = -ENODEV; @@ -807,10 +811,12 @@ } done: rtnl_unlock(); + release_offload_lock(in_offload_lock); out: return ret; rarok: rtnl_unlock(); + release_offload_lock(in_offload_lock); ret = copy_to_user(arg, &ifr, sizeof(struct ifreq)) ? -EFAULT : 0; goto out; } @@ -1477,6 +1483,7 @@ DEVINET_SYSCTL_RW_ENTRY(ARP_IGNORE, "arp_ignore"), DEVINET_SYSCTL_RW_ENTRY(ARP_ACCEPT, "arp_accept"), DEVINET_SYSCTL_RW_ENTRY(ARP_NOTIFY, "arp_notify"), + DEVINET_SYSCTL_RW_ENTRY(IFADDR_RTABLE, "ifaddr_rtable"), DEVINET_SYSCTL_FLUSHING_ENTRY(NOXFRM, "disable_xfrm"), DEVINET_SYSCTL_FLUSHING_ENTRY(NOPOLICY, "disable_policy"),