X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/c2a1bba0d1fe5e19f93c92544422036814695c45..1d28cc061677bd07d9bed48dd84bd5c590247043:/src/src/os.c diff --git a/src/src/os.c b/src/src/os.c index 5ce56b515..fc29f1766 100644 --- a/src/src/os.c +++ b/src/src/os.c @@ -2,8 +2,10 @@ * Exim - an Internet mail transport agent * *************************************************/ +/* Copyright (c) The Exim Maintainers 2021 - 2022 */ /* Copyright (c) University of Cambridge 1995 - 2018 */ /* See the file NOTICE for conditions of use and distribution. */ +/* SPDX-License-Identifier: GPL-2.0-or-later */ #ifdef STAND_ALONE # include @@ -493,12 +495,13 @@ if (getifaddrs(&ifalist) != 0) log_write(0, LOG_PANIC_DIE, "Unable to call getifaddrs: %d %s", errno, strerror(errno)); -struct ifaddrs *ifa; -for (ifa = ifalist; ifa != NULL; ifa = ifa->ifa_next) +for (struct ifaddrs * ifa = ifalist; ifa; ifa = ifa->ifa_next) { - if (ifa->ifa_addr->sa_family != AF_INET + struct sockaddr * ifa_addr = ifa->ifa_addr; + if (!ifa_addr) continue; + if (ifa_addr->sa_family != AF_INET #if HAVE_IPV6 - && ifa->ifa_addr->sa_family != AF_INET6 + && ifa_addr->sa_family != AF_INET6 #endif /* HAVE_IPV6 */ ) continue; @@ -509,12 +512,12 @@ for (ifa = ifalist; ifa != NULL; ifa = ifa->ifa_next) /* Create a data block for the address, fill in the data, and put it on the chain. */ - next = store_get(sizeof(ip_address_item)); + next = store_get(sizeof(ip_address_item), GET_UNTAINTED); next->next = NULL; next->port = 0; - (void)host_ntoa(-1, ifa->ifa_addr, next->address, NULL); + (void)host_ntoa(-1, ifa_addr, next->address, NULL); - if (yield == NULL) + if (!yield) yield = last = next; else { @@ -617,7 +620,6 @@ int vs; ip_address_item *yield = NULL; ip_address_item *last = NULL; ip_address_item *next; -char *cp; char buf[MAX_INTERFACES*sizeof(struct V_ifreq)]; struct sockaddr *addrp; size_t len = 0; @@ -683,7 +685,7 @@ buffer is not guaranteed to be aligned. Thus, we must first copy the basic struct to some aligned memory before looking at the field in the fixed part to find its length, and then recopy the correct length. */ -for (cp = buf; cp < buf + ifc.V_ifc_len; cp += len) +for (char * cp = buf; cp < buf + ifc.V_ifc_len; cp += len) { memcpy(CS &ifreq, cp, sizeof(ifreq)); @@ -745,7 +747,7 @@ for (cp = buf; cp < buf + ifc.V_ifc_len; cp += len) /* Create a data block for the address, fill in the data, and put it on the chain. */ - next = store_get(sizeof(ip_address_item)); + next = store_get(sizeof(ip_address_item), GET_UNTAINTED); next->next = NULL; next->port = 0; (void)host_ntoa(-1, addrp, next->address, NULL); @@ -777,13 +779,13 @@ interfaces. We just return the loopback address(es). */ ip_address_item * os_common_find_running_interfaces(void) { -ip_address_item *yield = store_get(sizeof(address_item)); +ip_address_item *yield = store_get(sizeof(address_item), GET_UNTAINTED); yield->address = US"127.0.0.1"; yield->port = 0; yield->next = NULL; #if HAVE_IPV6 -yield->next = store_get(sizeof(address_item)); +yield->next = store_get(sizeof(address_item), GET_UNTAINTED); yield->next->address = US"::1"; yield->next->port = 0; yield->next->next = NULL; @@ -833,7 +835,7 @@ return type. res_state os_get_dns_resolver_res(void) { - return &_res; +return &_res; } #endif /* OS_GET_DNS_RESOLVER_RES */