summaryrefslogtreecommitdiff
path: root/src/network/getnameinfo.c
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2015-10-26 23:03:55 +0100
committerRich Felker <dalias@aerifal.cx>2015-10-26 20:00:03 -0400
commit6eada2edb302ff061be8546b23c9cb836621d122 (patch)
treea1363be9c883eb37a4f7d7eda7ea399198109f1c /src/network/getnameinfo.c
parent2683e267fa6c20d2e7a498a85f79a1dfc4301f23 (diff)
downloadmusl-6eada2edb302ff061be8546b23c9cb836621d122.tar.gz
getnameinfo: make size check not fail for bigger sizes
getnameinfo() compares the size of the given struct sockaddr with sizeof(struct sockaddr_in) and sizeof(struct sockaddr_in6) depending on the net family. When you add a sockaddr of size sizeof(struct sockaddr_storage) this function will fail because the size of the sockaddr is too big. Change the check that it only fails if the size is too small, but make it work when it is too big for example when someone calls this function with a struct sockaddr_storage and its size. This fixes a problem with IoTivity 1.0.0 and musl. glibc and bionic are only failing if it is smaller, net/freebsd implemented the != check. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Diffstat (limited to 'src/network/getnameinfo.c')
-rw-r--r--src/network/getnameinfo.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/network/getnameinfo.c b/src/network/getnameinfo.c
index 3484fc69..5e6fae3e 100644
--- a/src/network/getnameinfo.c
+++ b/src/network/getnameinfo.c
@@ -135,13 +135,13 @@ int getnameinfo(const struct sockaddr *restrict sa, socklen_t sl,
switch (af) {
case AF_INET:
a = (void *)&((struct sockaddr_in *)sa)->sin_addr;
- if (sl != sizeof(struct sockaddr_in)) return EAI_FAMILY;
+ if (sl < sizeof(struct sockaddr_in)) return EAI_FAMILY;
mkptr4(ptr, a);
scopeid = 0;
break;
case AF_INET6:
a = (void *)&((struct sockaddr_in6 *)sa)->sin6_addr;
- if (sl != sizeof(struct sockaddr_in6)) return EAI_FAMILY;
+ if (sl < sizeof(struct sockaddr_in6)) return EAI_FAMILY;
if (memcmp(a, "\0\0\0\0\0\0\0\0\0\0\xff\xff", 12))
mkptr6(ptr, a);
else