From 4abfb73b8cadfe5604d2868cf1854e6e5cc5360f Mon Sep 17 00:00:00 2001 From: Matt Mundell Date: Wed, 28 Oct 2020 16:22:52 +0200 Subject: [PATCH] Always NULL check ifaddrs->ifa_addr Solves a segfault in networking_tests.c. man getifaddrs: This field may contain a null pointer. --- base/networking.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/base/networking.c b/base/networking.c index 7c3260939..64389caef 100644 --- a/base/networking.c +++ b/base/networking.c @@ -89,7 +89,8 @@ gvm_source_iface_init (const char *iface) { if (ifa->ifa_addr && strcmp (iface, ifa->ifa_name) == 0) { - if (ifa->ifa_addr->sa_family == AF_INET) + if (ifa->ifa_addr + && (ifa->ifa_addr->sa_family == AF_INET)) { struct in_addr *addr = &((struct sockaddr_in *) ifa->ifa_addr)->sin_addr; @@ -97,7 +98,8 @@ gvm_source_iface_init (const char *iface) memcpy (&global_source_addr, addr, sizeof (global_source_addr)); ret = 0; } - else if (ifa->ifa_addr->sa_family == AF_INET6) + else if (ifa->ifa_addr + && (ifa->ifa_addr->sa_family == AF_INET6)) { struct sockaddr_in6 *addr; @@ -1031,7 +1033,8 @@ gvm_routethrough (struct sockaddr_storage *storage_dest, for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { - if ((ifa->ifa_addr->sa_family == AF_INET) + if (ifa->ifa_addr + && (ifa->ifa_addr->sa_family == AF_INET) && (ifa->ifa_flags & (IFF_LOOPBACK))) { interface_out = g_strdup (ifa->ifa_name); @@ -1079,7 +1082,8 @@ gvm_routethrough (struct sockaddr_storage *storage_dest, { for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { - if ((ifa->ifa_addr->sa_family == AF_INET) + if (ifa->ifa_addr + && (ifa->ifa_addr->sa_family == AF_INET) && (g_strcmp0 (interface_out, ifa->ifa_name) == 0)) {