|
@@ -272,6 +272,10 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
|
|
|
|
|
|
if (addr_len < SIN6_LEN_RFC2133)
|
|
if (addr_len < SIN6_LEN_RFC2133)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
+
|
|
|
|
+ if (addr->sin6_family != AF_INET6)
|
|
|
|
+ return -EINVAL;
|
|
|
|
+
|
|
addr_type = ipv6_addr_type(&addr->sin6_addr);
|
|
addr_type = ipv6_addr_type(&addr->sin6_addr);
|
|
if ((addr_type & IPV6_ADDR_MULTICAST) && sock->type == SOCK_STREAM)
|
|
if ((addr_type & IPV6_ADDR_MULTICAST) && sock->type == SOCK_STREAM)
|
|
return -EINVAL;
|
|
return -EINVAL;
|