Signed-off-by: Hannes Frederic Sowa <[email protected]>
---
net/ipv4/af_inet.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
index aee599e23137e7..5f11399bafd16f 100644
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
@@ -453,6 +453,17 @@ int inet_allow_bind(struct sock *sk, __be32 addr)
chk_addr_ret != RTN_BROADCAST)
return -EADDRNOTAVAIL;
+ if (chk_addr_ret == RTN_LOCAL &&
+ net_afnetns(net) != sock_afnetns(sk)) {
+ struct afnetns *afnetns;
+
+ rcu_read_lock();
+ afnetns = ifa_find_afnetns_rcu(net, addr);
+ if (afnetns != sock_afnetns(sk))
+ chk_addr_ret = -EADDRNOTAVAIL;
+ rcu_read_unlock();
+ }
+
return chk_addr_ret;
}
EXPORT_SYMBOL(inet_allow_bind);
--
2.9.3