summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoreric <eric@openbsd.org>2018-11-03 09:13:24 +0000
committereric <eric@openbsd.org>2018-11-03 09:13:24 +0000
commit172d89a7c9bfd1a002b8b73eecc3d14704949255 (patch)
treebeb02ad5f8862b5f35b5d5609333d0b703ef9263
parentremove log_debug (diff)
downloadwireguard-openbsd-172d89a7c9bfd1a002b8b73eecc3d14704949255.tar.xz
wireguard-openbsd-172d89a7c9bfd1a002b8b73eecc3d14704949255.zip
For correctness, do not read struct servent if getservbyname_r() failed.
Also simplify code.
-rw-r--r--lib/libc/asr/getaddrinfo_async.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/lib/libc/asr/getaddrinfo_async.c b/lib/libc/asr/getaddrinfo_async.c
index 057890f56c6..9bfc0d6c7cd 100644
--- a/lib/libc/asr/getaddrinfo_async.c
+++ b/lib/libc/asr/getaddrinfo_async.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: getaddrinfo_async.c,v 1.55 2018/10/22 17:31:24 krw Exp $ */
+/* $OpenBSD: getaddrinfo_async.c,v 1.56 2018/11/03 09:13:24 eric Exp $ */
/*
* Copyright (c) 2012 Eric Faurot <eric@openbsd.org>
*
@@ -467,7 +467,7 @@ get_port(const char *servname, const char *proto, int numonly)
{
struct servent se;
struct servent_data sed;
- int port, r;
+ int port;
const char *e;
if (servname == NULL)
@@ -482,14 +482,12 @@ get_port(const char *servname, const char *proto, int numonly)
if (numonly)
return (-2);
+ port = -1;
memset(&sed, 0, sizeof(sed));
- r = getservbyname_r(servname, proto, &se, &sed);
- port = ntohs(se.s_port);
+ if (getservbyname_r(servname, proto, &se, &sed) != -1)
+ port = ntohs(se.s_port);
endservent_r(&sed);
- if (r == -1)
- return (-1); /* not found */
-
return (port);
}