From: Alan T. DeKok Date: Mon, 28 Mar 2022 14:29:27 +0000 (-0400) Subject: i->ifa_addr may not be aligned X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5b2eeb622b5f41410893f31e7d1c4867691cbaf9;p=thirdparty%2Ffreeradius-server.git i->ifa_addr may not be aligned on OSX it fails with alignment issues, as apparently the alignment requirements are different for sockaddr and sockaddr_storage? Or at least ubsan complains on my Mac. --- diff --git a/src/lib/util/inet.c b/src/lib/util/inet.c index 792079fb8a..67616238dc 100644 --- a/src/lib/util/inet.c +++ b/src/lib/util/inet.c @@ -1508,12 +1508,14 @@ int fr_interface_to_ipaddr(char const *interface, fr_ipaddr_t *ipaddr, int af, b for (i = list; i != NULL; i = i->ifa_next) { fr_ipaddr_t my_ipaddr; + struct sockaddr_storage sa; if (!i->ifa_addr || !i->ifa_name || ((af != AF_UNSPEC) && (af != i->ifa_addr->sa_family))) continue; if (strcmp(i->ifa_name, interface) != 0) continue; - fr_ipaddr_from_sockaddr(&my_ipaddr, NULL, - (struct sockaddr_storage *)i->ifa_addr, sizeof(struct sockaddr_in6)); + memcpy(&sa, i->ifa_addr, sizeof(struct sockaddr_in6)); /* ifa->ifa_addr may not be aligned properly */ + + fr_ipaddr_from_sockaddr(&my_ipaddr, NULL, &sa, sizeof(struct sockaddr_in6)); /* * If they ask for a link local address, then give