- Use ipv6_chk_acast_addr_src() in inet6_bind().
Signed-off-by: Francois-Xavier Le Bail <redacted>
---
Tested with SOCK_DGRAM and SOCK_STREAM sockets.
Tested with link-local and global anycast addresses.
net/ipv6/af_inet6.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
index c921d5d..68b81e9 100644
--- a/net/ipv6/af_inet6.c
+++ b/net/ipv6/af_inet6.c
@@ -347,7 +347,9 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
if (!(addr_type & IPV6_ADDR_MULTICAST)) {
if (!(inet->freebind || inet->transparent) &&
!ipv6_chk_addr(net, &addr->sin6_addr,
- dev, 0)) {
+ dev, 0) &&
+ !ipv6_chk_acast_addr_src(net, dev,
+ &addr->sin6_addr)) {
err = -EADDRNOTAVAIL;
goto out_unlock;
}