1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
From: Patrick Griffis <pgriffis@igalia.com>
Date: Tue, 21 Oct 2025 15:42:54 -0500
Subject: gresolver: Fix loopback detection of IPv6 addresses
Previously the len passed to g_socket_address_new_from_native() was only
for IPv4 addresses and the constructor would fail.
This was reported and discussed here:
https://gitlab.gnome.org/GNOME/glib/-/commit/fe0139ee985075f3c12932d7123cb594356e7e9d#note_2581394
Origin: upstream, 2.86.2, commit:90c29b7fb2bb3c92d2e68b74c64c20a5418cf986
---
gio/gthreadedresolver.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/gio/gthreadedresolver.c b/gio/gthreadedresolver.c
index 988015b..78740b0 100644
--- a/gio/gthreadedresolver.c
+++ b/gio/gthreadedresolver.c
@@ -292,11 +292,19 @@ check_only_has_loopback_interfaces (void)
for (struct ifaddrs *addr = addrs; addr; addr = addr->ifa_next)
{
struct sockaddr *sa = addr->ifa_addr;
+ size_t addrlen;
GSocketAddress *saddr;
if (!sa)
continue;
- saddr = g_socket_address_new_from_native (sa, sizeof (struct sockaddr));
+ if (sa->sa_family == AF_INET)
+ addrlen = sizeof (struct sockaddr_in);
+ else if (sa->sa_family == AF_INET6)
+ addrlen = sizeof (struct sockaddr_in6);
+ else
+ continue;
+
+ saddr = g_socket_address_new_from_native (sa, addrlen);
if (!saddr)
continue;
|