]> Pileus Git - ~andy/linux/blobdiff - include/linux/sunrpc/clnt.h
SUNRPC: compare scopeid for link-local addresses
[~andy/linux] / include / linux / sunrpc / clnt.h
index db7bcaf7c5bd98a873f1b50fc3ad87a13df6c353..ee1bb67f525e100dfb3516081ac6f52c98a6da57 100644 (file)
@@ -218,7 +218,13 @@ static inline bool __rpc_cmp_addr6(const struct sockaddr *sap1,
 {
        const struct sockaddr_in6 *sin1 = (const struct sockaddr_in6 *)sap1;
        const struct sockaddr_in6 *sin2 = (const struct sockaddr_in6 *)sap2;
-       return ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr);
+
+       if (!ipv6_addr_equal(&sin1->sin6_addr, &sin2->sin6_addr))
+               return false;
+       else if (ipv6_addr_type(&sin1->sin6_addr) & IPV6_ADDR_LINKLOCAL)
+               return sin1->sin6_scope_id == sin2->sin6_scope_id;
+
+       return true;
 }
 
 static inline bool __rpc_copy_addr6(struct sockaddr *dst,