diff options
author | V3n3RiX <venerix@redcorelinux.org> | 2018-10-07 11:03:14 +0100 |
---|---|---|
committer | V3n3RiX <venerix@redcorelinux.org> | 2018-10-07 11:03:14 +0100 |
commit | 957235cf19a691360c720f7913672adda4258ed0 (patch) | |
tree | 812bba7928f4293ead05a7ee9c1ac39c5ef9f12e /sys-libs/musl/files | |
parent | 62f67115b5c46134c34f88f4b1cbdacc19384c0a (diff) |
gentoo resync : 07.10.2018
Diffstat (limited to 'sys-libs/musl/files')
-rw-r--r-- | sys-libs/musl/files/musl-1.1.20-fix-getaddrinfo.patch | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/sys-libs/musl/files/musl-1.1.20-fix-getaddrinfo.patch b/sys-libs/musl/files/musl-1.1.20-fix-getaddrinfo.patch new file mode 100644 index 000000000000..28d4558b8b6c --- /dev/null +++ b/sys-libs/musl/files/musl-1.1.20-fix-getaddrinfo.patch @@ -0,0 +1,51 @@ +From f381c118b2d4f7d914481d3cdc830ce41369b002 Mon Sep 17 00:00:00 2001 +From: Rich Felker <dalias@aerifal.cx> +Date: Wed, 19 Sep 2018 18:03:22 -0400 +Subject: fix getaddrinfo regression with AI_ADDRCONFIG on some configurations + +despite not being documented to do so in the standard or Linux +documentation, attempts to udp connect to 127.0.0.1 or ::1 generate +EADDRNOTAVAIL when the loopback device is not configured and there is +no default route for IPv6. this caused getaddrinfo with AI_ADDRCONFIG +to fail with EAI_SYSTEM and EADDRNOTAVAIL on some no-IPv6 +configurations, rather than the intended behavior of detecting IPv6 as +unsuppported and producing IPv4-only results. + +previously, only EAFNOSUPPORT was treated as unavailability of the +address family being probed. instead, treat all errors related to +inability to get an address or route as conclusive that the family +being probed is unsupported, and only fail with EAI_SYSTEM on other +errors. + +further improvements may be desirable, such as reporting EAI_AGAIN +instead of EAI_SYSTEM for errors which are expected to be transient, +but this patch should suffice to fix the serious regression. +--- + src/network/getaddrinfo.c | 11 ++++++++++- + 1 file changed, 10 insertions(+), 1 deletion(-) + +diff --git a/src/network/getaddrinfo.c b/src/network/getaddrinfo.c +index ba26847a..e33bfa28 100644 +--- a/src/network/getaddrinfo.c ++++ b/src/network/getaddrinfo.c +@@ -76,7 +76,16 @@ int getaddrinfo(const char *restrict host, const char *restrict serv, const stru + close(s); + if (!r) continue; + } +- if (errno != EAFNOSUPPORT) return EAI_SYSTEM; ++ switch (errno) { ++ case EADDRNOTAVAIL: ++ case EAFNOSUPPORT: ++ case EHOSTUNREACH: ++ case ENETDOWN: ++ case ENETUNREACH: ++ break; ++ default: ++ return EAI_SYSTEM; ++ } + if (family == tf[i]) return EAI_NONAME; + family = tf[1-i]; + } +-- +cgit v1.2.1 + |