summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorнаб <nabijaczleweli@nabijaczleweli.xyz>2022-06-07 17:39:04 +0200
committerWaldemar Brodkorb <wbx@openadk.org>2022-06-08 09:01:43 +0200
commit6d45c0fe89e6de7d35a991051ec7f9feaaaf3729 (patch)
treef44894bf93e15c42f0a818fd9348d67daf7d11d0
parent28805243f676e769f7c8035125c9e78bf5606434 (diff)
inet: gethostid: only accept v4 addresses
getaddrinfo() returns addresses from, at least, ip(7) and ipv6(7), but _addr() always uses sin_addr from struct sockaddr_in; we're saved from wild unsoundness (or incompatibility) by virtue of struct sockaddr_in6 having an always-0 u32 sin6_flowinfo at the same offset, so we end up returning 0 anyway, but in a round-about and definitely unintended way Instead, limit the request to AF_INET, and fall through to the end early, returning the default id=0 Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
-rw-r--r--libc/inet/hostid.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/libc/inet/hostid.c b/libc/inet/hostid.c
index 4ddfbd123..5977ada25 100644
--- a/libc/inet/hostid.c
+++ b/libc/inet/hostid.c
@@ -61,8 +61,7 @@ long int gethostid(void)
* Mitch
*/
if (gethostname(host, HOST_NAME_MAX) >= 0 && *host) {
- struct addrinfo hints, *results, *addr;
- memset(&hints, 0, sizeof(struct addrinfo));
+ struct addrinfo hints = {.ai_family = AF_INET}, *results, *addr;
if (!getaddrinfo(host, NULL, &hints, &results)) {
for (addr = results; addr; addr = results->ai_next) {
/* Just so it doesn't look exactly like the