forked from rpms/glibc
e43852d149
* Thu Oct 13 2022 Arjun Shankar <arjun@redhat.com> - 2.34-48 - Handle non-hostname CNAME aliases during name resolution (#2129005) - Sync with upstream branch release/2.34/master, commit e3976287b22422787f3cc6fc9adda58304b55bd9: - nscd: Drop local address tuple variable [BZ #29607] - x86-64: Require BMI1/BMI2 for AVX2 strrchr and wcsrchr implementations - x86-64: Require BMI2 and LZCNT for AVX2 memrchr implementation - x86-64: Require BMI2 for AVX2 (raw|w)memchr implementations - x86-64: Require BMI2 for AVX2 wcs(n)cmp implementations - x86-64: Require BMI2 for AVX2 strncmp implementation - x86-64: Require BMI2 for AVX2 strcmp implementation - x86-64: Require BMI2 for AVX2 str(n)casecmp implementations - x86: include BMI1 and BMI2 in x86-64-v3 level - nptl: Add backoff mechanism to spinlock loop - sysdeps: Add 'get_fast_jitter' interace in fast-jitter.h - nptl: Effectively skip CAS in spinlock loop - Move assignment out of the CAS condition - Add LLL_MUTEX_READ_LOCK [BZ #28537] - Avoid extra load with CAS in __pthread_mutex_clocklock_common [BZ #28537] - Avoid extra load with CAS in __pthread_mutex_lock_full [BZ #28537] - resolv: Fix building tst-resolv-invalid-cname for earlier C standards - nss_dns: Rewrite _nss_dns_gethostbyname4_r using current interfaces - resolv: Add new tst-resolv-invalid-cname - nss_dns: In gaih_getanswer_slice, skip strange aliases (bug 12154) (#2129005) - nss_dns: Rewrite getanswer_r to match getanswer_ptr (bug 12154, bug 29305) - nss_dns: Remove remnants of IPv6 address mapping - nss_dns: Rewrite _nss_dns_gethostbyaddr2_r and getanswer_ptr - nss_dns: Split getanswer_ptr from getanswer_r - resolv: Add DNS packet parsing helpers geared towards wire format - resolv: Add internal __ns_name_length_uncompressed function - resolv: Add the __ns_samebinaryname function - resolv: Add internal __res_binary_hnok function - resolv: Add tst-resolv-aliases - resolv: Add tst-resolv-byaddr for testing reverse lookup - gconv: Use 64-bit interfaces in gconv_parseconfdir (bug 29583) - elf: Fix hwcaps string size overestimation - nscd: Fix netlink cache invalidation if epoll is used [BZ #29415] - Apply asm redirections in wchar.h before first use - Apply asm redirections in stdio.h before first use [BZ #27087] - elf: Call __libc_early_init for reused namespaces (bug 29528) Resolves: #2129005 Resolves: #2116960
47 lines
1.8 KiB
Diff
47 lines
1.8 KiB
Diff
commit e3976287b22422787f3cc6fc9adda58304b55bd9
|
|
Author: Siddhesh Poyarekar <siddhesh@sourceware.org>
|
|
Date: Tue Oct 4 18:40:25 2022 -0400
|
|
|
|
nscd: Drop local address tuple variable [BZ #29607]
|
|
|
|
When a request needs to be resent (e.g. due to insufficient buffer
|
|
space), the references to subsequent tuples in the local variable are
|
|
stale and should not be used. This used to work by accident before, but
|
|
since 1d495912a it no longer does. Instead of trying to reset it, just
|
|
let gethostbyname4_r write into TUMPBUF6 for us, thus maintaining a
|
|
consistent state at all times. This is now consistent with what is done
|
|
in gaih_inet for getaddrinfo.
|
|
|
|
Resolves: BZ #29607
|
|
Reported-by: Holger Hoffstätte <holger@applied-asynchrony.com>
|
|
Tested-by: Holger Hoffstätte <holger@applied-asynchrony.com>
|
|
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
|
|
(cherry picked from commit 6e33e5c4b73cea7b8aa3de0947123db16200fb65)
|
|
|
|
diff --git a/nscd/aicache.c b/nscd/aicache.c
|
|
index 737ace11cc276021..3b300ad9b7db2297 100644
|
|
--- a/nscd/aicache.c
|
|
+++ b/nscd/aicache.c
|
|
@@ -111,11 +111,10 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req,
|
|
"gethostbyname4_r");
|
|
if (fct4 != NULL)
|
|
{
|
|
- struct gaih_addrtuple atmem;
|
|
struct gaih_addrtuple *at;
|
|
while (1)
|
|
{
|
|
- at = &atmem;
|
|
+ at = NULL;
|
|
rc6 = 0;
|
|
herrno = 0;
|
|
status[1] = DL_CALL_FCT (fct4, (key, &at,
|
|
@@ -138,7 +137,7 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req,
|
|
goto next_nip;
|
|
|
|
/* We found the data. Count the addresses and the size. */
|
|
- for (const struct gaih_addrtuple *at2 = at = &atmem; at2 != NULL;
|
|
+ for (const struct gaih_addrtuple *at2 = at; at2 != NULL;
|
|
at2 = at2->next)
|
|
{
|
|
++naddrs;
|