diff options
author | 2015-03-01 15:44:40 +0000 | |
---|---|---|
committer | 2015-03-01 15:44:40 +0000 | |
commit | 813771f064a570586f77eebf5c1c0cca37952776 (patch) | |
tree | de00cd2351dab1c3bef74ee29e56be660f1f9525 | |
parent | Correctly set lowest_present_ofdm in iwm_mvm_ack_rates(). (diff) | |
download | wireguard-openbsd-813771f064a570586f77eebf5c1c0cca37952776.tar.xz wireguard-openbsd-813771f064a570586f77eebf5c1c0cca37952776.zip |
Make sure we only call getnameinfo() for AF_INET or AF_INET6 sockets.
getpeername() of a Unix domain socket may return without error on
some systems without actually setting ss_family so getnameinfo()
was getting called with ss_family set to AF_UNSPEC. OK djm@
-rw-r--r-- | usr.bin/ssh/canohost.c | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/usr.bin/ssh/canohost.c b/usr.bin/ssh/canohost.c index 2f9851061a3..a949f5ed440 100644 --- a/usr.bin/ssh/canohost.c +++ b/usr.bin/ssh/canohost.c @@ -1,4 +1,4 @@ -/* $OpenBSD: canohost.c,v 1.71 2014/07/15 15:54:14 millert Exp $ */ +/* $OpenBSD: canohost.c,v 1.72 2015/03/01 15:44:40 millert Exp $ */ /* * Author: Tatu Ylonen <ylo@cs.hut.fi> * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland @@ -224,19 +224,24 @@ get_socket_address(int sock, int remote, int flags) return NULL; } - if (addr.ss_family == AF_UNIX) { + switch (addr.ss_family) { + case AF_INET: + case AF_INET6: + /* Get the address in ascii. */ + if ((r = getnameinfo((struct sockaddr *)&addr, addrlen, ntop, + sizeof(ntop), NULL, 0, flags)) != 0) { + error("get_socket_address: getnameinfo %d failed: %s", + flags, ssh_gai_strerror(r)); + return NULL; + } + return xstrdup(ntop); + case AF_UNIX: /* Get the Unix domain socket path. */ return xstrdup(((struct sockaddr_un *)&addr)->sun_path); - } - - /* Get the address in ascii. */ - if ((r = getnameinfo((struct sockaddr *)&addr, addrlen, ntop, - sizeof(ntop), NULL, 0, flags)) != 0) { - error("get_socket_address: getnameinfo %d failed: %s", flags, - ssh_gai_strerror(r)); + default: + /* We can't look up remote Unix domain sockets. */ return NULL; } - return xstrdup(ntop); } char * @@ -345,8 +350,8 @@ get_sock_port(int sock, int local) } } - /* Unix domain sockets don't have a port number. */ - if (from.ss_family == AF_UNIX) + /* Non-inet sockets don't have a port number. */ + if (from.ss_family != AF_INET && from.ss_family != AF_INET6) return 0; /* Return port number. */ |