From: Amir Vadai Date: Thu, 6 Jan 2011 13:49:55 +0000 (+0200) Subject: sdp: check address family before connecting X-Git-Tag: v4.1.12-92~264^2~5^2~45 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=4107ed2f261b3a86bd54a38b0a428b2426e57d6a;p=users%2Fjedix%2Flinux-maple.git sdp: check address family before connecting Signed-off-by: Amir Vadai --- diff --git a/drivers/infiniband/ulp/sdp/sdp_main.c b/drivers/infiniband/ulp/sdp/sdp_main.c index 6ca82f1674ce..45ceba21ff85 100644 --- a/drivers/infiniband/ulp/sdp/sdp_main.c +++ b/drivers/infiniband/ulp/sdp/sdp_main.c @@ -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)