Message ID | 20220601171723.qnsmyw4bkw64ajhk@tarta.nabijaczleweli.xyz |
---|---|
State | Accepted |
Headers | show |
Series | [uclibc-ng-devel] inet: gethostid: only accept v4 addresses | expand |
Hi, наб wrote, > 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> Applied and pushed, thx Waldemar
diff -ur uClibc-ng-1.0.41.orig/libc/inet/hostid.c uClibc-ng-1.0.41/libc/inet/hostid.c --- uClibc-ng-1.0.41.orig/libc/inet/hostid.c 2022-05-20 17:07:47.000000000 +0200 +++ uClibc-ng-1.0.41/libc/inet/hostid.c 2022-06-01 19:09:21.971253011 +0200 @@ -61,8 +61,7 @@ * 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