summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2018-02-05 21:00:15 +0100
committerCorinna Vinschen <corinna@vinschen.de>2018-02-05 21:00:15 +0100
commit2f61f65601b842af126c64cf02a556425afa1709 (patch)
tree1ebc1a128b5f3528e67f152598b2a57821abc6b6
parent34f031982fbf9ce6eb23e47f7f0aeede175cd596 (diff)
downloadcygnal-2f61f65601b842af126c64cf02a556425afa1709.tar.gz
cygnal-2f61f65601b842af126c64cf02a556425afa1709.tar.bz2
cygnal-2f61f65601b842af126c64cf02a556425afa1709.zip
Cygwin: bindresvport: check correctness of address family
Assuming the address parameter is non-NULL, the test in cygwin_bindresvport_sa only tests if the address family is supported at all, which is insufficient. Check if the incoming address family matches the socket address family and for being AF_INET in cygwin_bindresvport since the latter doesn't support any other family. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
-rw-r--r--winsup/cygwin/net.cc11
1 files changed, 10 insertions, 1 deletions
diff --git a/winsup/cygwin/net.cc b/winsup/cygwin/net.cc
index b6890121a..cd4334738 100644
--- a/winsup/cygwin/net.cc
+++ b/winsup/cygwin/net.cc
@@ -2482,6 +2482,11 @@ cygwin_bindresvport_sa (int fd, struct sockaddr *sa)
memset (&sst, 0, sizeof sst);
sa->sa_family = fh->get_addr_family ();
}
+ else if (sa->sa_family != fh->get_addr_family ())
+ {
+ set_errno (EPFNOSUPPORT);
+ __leave;
+ }
switch (sa->sa_family)
{
@@ -2529,10 +2534,14 @@ cygwin_bindresvport_sa (int fd, struct sockaddr *sa)
return ret;
}
-
extern "C" int
cygwin_bindresvport (int fd, struct sockaddr_in *sin)
{
+ if (sin && sin->sin_family != AF_INET)
+ {
+ set_errno (EAFNOSUPPORT);
+ return -1;
+ }
return cygwin_bindresvport_sa (fd, (struct sockaddr *) sin);
}