]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sdp: check address family before connecting
authorAmir Vadai <amirv@mellanox.co.il>
Thu, 6 Jan 2011 13:49:55 +0000 (15:49 +0200)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Tue, 6 Oct 2015 12:05:40 +0000 (05:05 -0700)
Signed-off-by: Amir Vadai <amirv@mellanox.co.il>
drivers/infiniband/ulp/sdp/sdp_main.c

index 6ca82f1674ce6ba46c272e9cb4fa1cbdb59c17ec..45ceba21ff8543d892a34fb360664ae3e83db5bf 100644 (file)
@@ -806,6 +806,9 @@ static int sdp_ipv6_connect(struct sock *sk, struct sockaddr *uaddr, int addr_le
        if (uaddr->sa_family == AF_INET6_SDP)
                uaddr->sa_family = AF_INET6;
 
+       if (uaddr->sa_family != AF_INET6)
+               return -EAFNOSUPPORT;
+
        /*
         *      connect() to INADDR_ANY means loopback (BSD'ism).
         */
@@ -837,6 +840,9 @@ static int sdp_ipv6_connect(struct sock *sk, struct sockaddr *uaddr, int addr_le
                struct sockaddr_in *addr4 = (struct sockaddr_in *)uaddr;
                struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)uaddr;
 
+               if (__ipv6_only_sock(sk))
+                       return -ENETUNREACH;
+
                addr4->sin_addr.s_addr = addr6->sin6_addr.s6_addr32[3];
                addr4->sin_family = AF_INET;
        }
@@ -874,6 +880,9 @@ static int sdp_ipv4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_le
        if (uaddr->sa_family == AF_INET_SDP)
                uaddr->sa_family = AF_INET;
 
+       if (uaddr->sa_family != AF_INET)
+               return -EAFNOSUPPORT;
+
        if (!ssk->id) {
                rc = sdp_get_port(sk, 0);
                if (rc)