diff options
author | Matt Johnston <matt@ucc.asn.au> | 2017-05-18 23:45:10 +0800 |
---|---|---|
committer | Matt Johnston <matt@ucc.asn.au> | 2017-05-18 23:45:10 +0800 |
commit | 9de4780220d54bbbe41f37f3a41bf7a3a96b9f45 (patch) | |
tree | 13d460950f9bbb64df98359ec7c69a04d4151c08 /netio.c | |
parent | 892d452e8ef92a10158e12c5d26855397b30b9ba (diff) | |
parent | baa2684ccb97e8222c2cc8288853a32a15971781 (diff) | |
download | dropbear-9de4780220d54bbbe41f37f3a41bf7a3a96b9f45.tar.gz |
merge main to fuzz
Diffstat (limited to 'netio.c')
-rw-r--r-- | netio.c | 38 |
1 files changed, 36 insertions, 2 deletions
@@ -485,14 +485,36 @@ void get_socket_address(int fd, char **local_host, char **local_port, if (local_host || local_port) { addrlen = sizeof(addr); if (getsockname(fd, (struct sockaddr*)&addr, &addrlen) < 0) { - dropbear_exit("Failed socket address: %s", strerror(errno)); + if (errno == ENOTSOCK) { + // FUZZ + if (local_host) { + *local_host = m_strdup("notsocket"); + } + if (local_port) { + *local_port = m_strdup("999"); + } + return; + } else { + dropbear_exit("Failed socket address: %s", strerror(errno)); + } } getaddrstring(&addr, local_host, local_port, host_lookup); } if (remote_host || remote_port) { addrlen = sizeof(addr); if (getpeername(fd, (struct sockaddr*)&addr, &addrlen) < 0) { - dropbear_exit("Failed socket address: %s", strerror(errno)); + if (errno == ENOTSOCK) { + // FUZZ + if (remote_host) { + *remote_host = m_strdup("notsocket"); + } + if (remote_port) { + *remote_port = m_strdup("999"); + } + return; + } else { + dropbear_exit("Failed socket address: %s", strerror(errno)); + } } getaddrstring(&addr, remote_host, remote_port, host_lookup); } @@ -546,6 +568,18 @@ void getaddrstring(struct sockaddr_storage* addr, return; } else { /* if we can't do a numeric lookup, something's gone terribly wrong */ + if (ret == EAI_FAMILY) { + // FUZZ + // Fake it for non-socket input + if (ret_host) { + *ret_host = m_strdup("0.0.0.0"); + } + if (ret_port) + { + *ret_port = m_strdup("999"); + } + return; + } dropbear_exit("Failed lookup: %s", gai_strerror(ret)); } } |