rxrpc: Fix network address validation
[linux-2.6-microblaze.git] / net / rxrpc / af_rxrpc.c
index 2f3991c..aacdd96 100644 (file)
@@ -93,12 +93,11 @@ static int rxrpc_validate_address(struct rxrpc_sock *rx,
            srx->transport_len > len)
                return -EINVAL;
 
-       if (srx->transport.family != rx->family &&
-           srx->transport.family == AF_INET && rx->family != AF_INET6)
-               return -EAFNOSUPPORT;
-
        switch (srx->transport.family) {
        case AF_INET:
+               if (rx->family != AF_INET &&
+                   rx->family != AF_INET6)
+                       return -EAFNOSUPPORT;
                if (srx->transport_len < sizeof(struct sockaddr_in))
                        return -EINVAL;
                tail = offsetof(struct sockaddr_rxrpc, transport.sin.__pad);
@@ -106,6 +105,8 @@ static int rxrpc_validate_address(struct rxrpc_sock *rx,
 
 #ifdef CONFIG_AF_RXRPC_IPV6
        case AF_INET6:
+               if (rx->family != AF_INET6)
+                       return -EAFNOSUPPORT;
                if (srx->transport_len < sizeof(struct sockaddr_in6))
                        return -EINVAL;
                tail = offsetof(struct sockaddr_rxrpc, transport) +