!866 [sync] PR-859: sync from glibc upstream 2.38 branch.
From: @openeuler-sync-bot Reviewed-by: @liqingqing_1229 Signed-off-by: @liqingqing_1229
This commit is contained in:
commit
b42bf2368f
58
0001-s390x-Fix-segfault-in-wcsncmp-BZ-31934.patch
Normal file
58
0001-s390x-Fix-segfault-in-wcsncmp-BZ-31934.patch
Normal file
@ -0,0 +1,58 @@
|
||||
From 712453634c8efd71a9b3ff0122145a9e90e9955c Mon Sep 17 00:00:00 2001
|
||||
From: Stefan Liebler <stli@linux.ibm.com>
|
||||
Date: Thu, 11 Jul 2024 11:28:53 +0200
|
||||
Subject: [PATCH 01/12] s390x: Fix segfault in wcsncmp [BZ #31934]
|
||||
|
||||
The z13/vector-optimized wcsncmp implementation segfaults if n=1
|
||||
and there is only one character (equal on both strings) before
|
||||
the page end. Then it loads and compares one character and misses
|
||||
to check n again. The following load fails.
|
||||
|
||||
This patch removes the extra load and compare of the first character
|
||||
and just start with the loop which uses vector-load-to-block-boundary.
|
||||
This code-path also checks n.
|
||||
|
||||
With this patch both tests are passing:
|
||||
- the simplified one mentioned in the bugzilla 31934
|
||||
- the full one in Florian Weimer's patch:
|
||||
"manual: Document a GNU extension for strncmp/wcsncmp"
|
||||
(https://patchwork.sourceware.org/project/glibc/patch/874j9eml6y.fsf@oldenburg.str.redhat.com/):
|
||||
On s390x-linux-gnu (z16), the new wcsncmp test fails due to bug 31934.
|
||||
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
|
||||
|
||||
(cherry picked from commit 9b7651410375ec8848a1944992d663d514db4ba7)
|
||||
---
|
||||
sysdeps/s390/wcsncmp-vx.S | 10 +---------
|
||||
1 file changed, 1 insertion(+), 9 deletions(-)
|
||||
|
||||
diff --git a/sysdeps/s390/wcsncmp-vx.S b/sysdeps/s390/wcsncmp-vx.S
|
||||
index 1bf769b870..4028d1e624 100644
|
||||
--- a/sysdeps/s390/wcsncmp-vx.S
|
||||
+++ b/sysdeps/s390/wcsncmp-vx.S
|
||||
@@ -59,14 +59,7 @@ ENTRY(WCSNCMP_Z13)
|
||||
sllg %r4,%r4,2 /* Convert character-count to byte-count. */
|
||||
locgrne %r4,%r1 /* Use max byte-count, if bit 0/1 was one. */
|
||||
|
||||
- /* Check first character without vector load. */
|
||||
- lghi %r5,4 /* current_len = 4 bytes. */
|
||||
- /* Check s1/2[0]. */
|
||||
- lt %r0,0(%r2)
|
||||
- l %r1,0(%r3)
|
||||
- je .Lend_cmp_one_char
|
||||
- crjne %r0,%r1,.Lend_cmp_one_char
|
||||
-
|
||||
+ lghi %r5,0 /* current_len = 0 bytes. */
|
||||
.Lloop:
|
||||
vlbb %v17,0(%r5,%r3),6 /* Load s2 to block boundary. */
|
||||
vlbb %v16,0(%r5,%r2),6 /* Load s1 to block boundary. */
|
||||
@@ -167,7 +160,6 @@ ENTRY(WCSNCMP_Z13)
|
||||
srl %r4,2 /* And convert it to character-index. */
|
||||
vlgvf %r0,%v16,0(%r4) /* Load character-values. */
|
||||
vlgvf %r1,%v17,0(%r4)
|
||||
-.Lend_cmp_one_char:
|
||||
cr %r0,%r1
|
||||
je .Lend_equal
|
||||
lghi %r2,1
|
||||
--
|
||||
2.33.0
|
||||
|
||||
161
0002-nptl-fix-potential-merge-of-__rseq_-relro-symbols.patch
Normal file
161
0002-nptl-fix-potential-merge-of-__rseq_-relro-symbols.patch
Normal file
@ -0,0 +1,161 @@
|
||||
From 7bfc35959dae3287e9097a960ebfddb19441bb55 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Jeanson <mjeanson@efficios.com>
|
||||
Date: Wed, 3 Jul 2024 12:35:34 -0400
|
||||
Subject: [PATCH 02/12] nptl: fix potential merge of __rseq_* relro symbols
|
||||
|
||||
While working on a patch to add support for the extensible rseq ABI, we
|
||||
came across an issue where a new 'const' variable would be merged with
|
||||
the existing '__rseq_size' variable. We tracked this to the use of
|
||||
'-fmerge-all-constants' which allows the compiler to merge identical
|
||||
constant variables. This means that all 'const' variables in a compile
|
||||
unit that are of the same size and are initialized to the same value can
|
||||
be merged.
|
||||
|
||||
In this specific case, on 32 bit systems 'unsigned int' and 'ptrdiff_t'
|
||||
are both 4 bytes and initialized to 0 which should trigger the merge.
|
||||
However for reasons we haven't delved into when the attribute 'section
|
||||
(".data.rel.ro")' is added to the mix, only variables of the same exact
|
||||
types are merged. As far as we know this behavior is not specified
|
||||
anywhere and could change with a new compiler version, hence this patch.
|
||||
|
||||
Move the definitions of these variables into an assembler file and add
|
||||
hidden writable aliases for internal use. This has the added bonus of
|
||||
removing the asm workaround to set the values on rseq registration.
|
||||
|
||||
Tested on Debian 12 with GCC 12.2.
|
||||
|
||||
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
|
||||
Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
|
||||
Reviewed-by: Florian Weimer <fweimer@redhat.com>
|
||||
(cherry picked from commit 2b92982e2369d292560793bee8e730f695f48ff3)
|
||||
---
|
||||
elf/Makefile | 1 +
|
||||
elf/dl-rseq-symbols.S | 64 +++++++++++++++++++++++++++++++++++
|
||||
sysdeps/nptl/dl-tls_init_tp.c | 14 ++++----
|
||||
3 files changed, 71 insertions(+), 8 deletions(-)
|
||||
create mode 100644 elf/dl-rseq-symbols.S
|
||||
|
||||
diff --git a/elf/Makefile b/elf/Makefile
|
||||
index c2af11b92c..04e1d7ded5 100644
|
||||
--- a/elf/Makefile
|
||||
+++ b/elf/Makefile
|
||||
@@ -74,6 +74,7 @@ dl-routines = \
|
||||
dl-printf \
|
||||
dl-profile \
|
||||
dl-reloc \
|
||||
+ dl-rseq-symbols \
|
||||
dl-runtime \
|
||||
dl-scope \
|
||||
dl-setup_hash \
|
||||
diff --git a/elf/dl-rseq-symbols.S b/elf/dl-rseq-symbols.S
|
||||
new file mode 100644
|
||||
index 0000000000..b4bba06a99
|
||||
--- /dev/null
|
||||
+++ b/elf/dl-rseq-symbols.S
|
||||
@@ -0,0 +1,64 @@
|
||||
+/* Define symbols used by rseq.
|
||||
+ Copyright (C) 2024 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <https://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <sysdep.h>
|
||||
+
|
||||
+#if __WORDSIZE == 64
|
||||
+#define RSEQ_OFFSET_SIZE 8
|
||||
+#else
|
||||
+#define RSEQ_OFFSET_SIZE 4
|
||||
+#endif
|
||||
+
|
||||
+/* Some targets define a macro to denote the zero register. */
|
||||
+#undef zero
|
||||
+
|
||||
+/* Define 2 symbols: '__rseq_size' is public const and '_rseq_size' (an
|
||||
+ alias of '__rseq_size') is hidden and writable for internal use by the
|
||||
+ dynamic linker which will initialize the value both symbols point to
|
||||
+ before copy relocations take place. */
|
||||
+
|
||||
+ .globl __rseq_size
|
||||
+ .type __rseq_size, %object
|
||||
+ .size __rseq_size, 4
|
||||
+ .hidden _rseq_size
|
||||
+ .globl _rseq_size
|
||||
+ .type _rseq_size, %object
|
||||
+ .size _rseq_size, 4
|
||||
+ .section .data.rel.ro
|
||||
+ .balign 4
|
||||
+__rseq_size:
|
||||
+_rseq_size:
|
||||
+ .zero 4
|
||||
+
|
||||
+/* Define 2 symbols: '__rseq_offset' is public const and '_rseq_offset' (an
|
||||
+ alias of '__rseq_offset') is hidden and writable for internal use by the
|
||||
+ dynamic linker which will initialize the value both symbols point to
|
||||
+ before copy relocations take place. */
|
||||
+
|
||||
+ .globl __rseq_offset
|
||||
+ .type __rseq_offset, %object
|
||||
+ .size __rseq_offset, RSEQ_OFFSET_SIZE
|
||||
+ .hidden _rseq_offset
|
||||
+ .globl _rseq_offset
|
||||
+ .type _rseq_offset, %object
|
||||
+ .size _rseq_offset, RSEQ_OFFSET_SIZE
|
||||
+ .section .data.rel.ro
|
||||
+ .balign RSEQ_OFFSET_SIZE
|
||||
+__rseq_offset:
|
||||
+_rseq_offset:
|
||||
+ .zero RSEQ_OFFSET_SIZE
|
||||
diff --git a/sysdeps/nptl/dl-tls_init_tp.c b/sysdeps/nptl/dl-tls_init_tp.c
|
||||
index 2ed98c5a31..45ae260ceb 100644
|
||||
--- a/sysdeps/nptl/dl-tls_init_tp.c
|
||||
+++ b/sysdeps/nptl/dl-tls_init_tp.c
|
||||
@@ -45,8 +45,10 @@ rtld_mutex_dummy (pthread_mutex_t *lock)
|
||||
#endif
|
||||
|
||||
const unsigned int __rseq_flags;
|
||||
-const unsigned int __rseq_size attribute_relro;
|
||||
-const ptrdiff_t __rseq_offset attribute_relro;
|
||||
+
|
||||
+/* The variables are in .data.relro but are not yet write-protected. */
|
||||
+extern unsigned int _rseq_size attribute_hidden;
|
||||
+extern ptrdiff_t _rseq_offset attribute_hidden;
|
||||
|
||||
void
|
||||
__tls_pre_init_tp (void)
|
||||
@@ -105,10 +107,7 @@ __tls_init_tp (void)
|
||||
do_rseq = TUNABLE_GET (rseq, int, NULL);
|
||||
if (rseq_register_current_thread (pd, do_rseq))
|
||||
{
|
||||
- /* We need a writable view of the variables. They are in
|
||||
- .data.relro and are not yet write-protected. */
|
||||
- extern unsigned int size __asm__ ("__rseq_size");
|
||||
- size = sizeof (pd->rseq_area);
|
||||
+ _rseq_size = sizeof (pd->rseq_area);
|
||||
}
|
||||
|
||||
#ifdef RSEQ_SIG
|
||||
@@ -117,8 +116,7 @@ __tls_init_tp (void)
|
||||
all targets support __thread_pointer, so set __rseq_offset only
|
||||
if the rseq registration may have happened because RSEQ_SIG is
|
||||
defined. */
|
||||
- extern ptrdiff_t offset __asm__ ("__rseq_offset");
|
||||
- offset = (char *) &pd->rseq_area - (char *) __thread_pointer ();
|
||||
+ _rseq_offset = (char *) &pd->rseq_area - (char *) __thread_pointer ();
|
||||
#endif
|
||||
}
|
||||
|
||||
--
|
||||
2.33.0
|
||||
|
||||
51
0003-elf-Make-dl-rseq-symbols-Linux-only.patch
Normal file
51
0003-elf-Make-dl-rseq-symbols-Linux-only.patch
Normal file
@ -0,0 +1,51 @@
|
||||
From d9d019d674f95509b5001f4d878ae09e32ea7a10 Mon Sep 17 00:00:00 2001
|
||||
From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
Date: Thu, 4 Jul 2024 10:09:07 -0300
|
||||
Subject: [PATCH 03/12] elf: Make dl-rseq-symbols Linux only
|
||||
|
||||
And avoid a Hurd build failures.
|
||||
|
||||
Checked on x86_64-linux-gnu.
|
||||
|
||||
(cherry picked from commit 9fc639f654dc004736836613be703e6bed0c36a8)
|
||||
---
|
||||
elf/Makefile | 1 -
|
||||
sysdeps/unix/sysv/linux/Makefile | 4 ++++
|
||||
{elf => sysdeps/unix/sysv/linux}/dl-rseq-symbols.S | 0
|
||||
3 files changed, 4 insertions(+), 1 deletion(-)
|
||||
rename {elf => sysdeps/unix/sysv/linux}/dl-rseq-symbols.S (100%)
|
||||
|
||||
diff --git a/elf/Makefile b/elf/Makefile
|
||||
index 04e1d7ded5..c2af11b92c 100644
|
||||
--- a/elf/Makefile
|
||||
+++ b/elf/Makefile
|
||||
@@ -74,7 +74,6 @@ dl-routines = \
|
||||
dl-printf \
|
||||
dl-profile \
|
||||
dl-reloc \
|
||||
- dl-rseq-symbols \
|
||||
dl-runtime \
|
||||
dl-scope \
|
||||
dl-setup_hash \
|
||||
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
|
||||
index be801e3be4..623a7d4de0 100644
|
||||
--- a/sysdeps/unix/sysv/linux/Makefile
|
||||
+++ b/sysdeps/unix/sysv/linux/Makefile
|
||||
@@ -587,6 +587,10 @@ tests += \
|
||||
endif
|
||||
|
||||
ifeq ($(subdir),elf)
|
||||
+dl-routines += \
|
||||
+ dl-rseq-symbols \
|
||||
+ # dl-routines
|
||||
+
|
||||
sysdep-rtld-routines += \
|
||||
dl-brk \
|
||||
dl-getcwd \
|
||||
diff --git a/elf/dl-rseq-symbols.S b/sysdeps/unix/sysv/linux/dl-rseq-symbols.S
|
||||
similarity index 100%
|
||||
rename from elf/dl-rseq-symbols.S
|
||||
rename to sysdeps/unix/sysv/linux/dl-rseq-symbols.S
|
||||
--
|
||||
2.33.0
|
||||
|
||||
171
0004-Linux-Make-__rseq_size-useful-for-feature-detection-.patch
Normal file
171
0004-Linux-Make-__rseq_size-useful-for-feature-detection-.patch
Normal file
@ -0,0 +1,171 @@
|
||||
From bb30bd21622910715b7b3020b17e6e97a8b4ec80 Mon Sep 17 00:00:00 2001
|
||||
From: Florian Weimer <fweimer@redhat.com>
|
||||
Date: Mon, 8 Jul 2024 21:14:00 +0200
|
||||
Subject: [PATCH 04/12] Linux: Make __rseq_size useful for feature detection
|
||||
(bug 31965)
|
||||
|
||||
The __rseq_size value is now the active area of struct rseq
|
||||
(so 20 initially), not the full struct size including padding
|
||||
at the end (32 initially).
|
||||
|
||||
Update misc/tst-rseq to print some additional diagnostics.
|
||||
|
||||
Reviewed-by: Michael Jeanson <mjeanson@efficios.com>
|
||||
Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
|
||||
(cherry picked from commit 2e456ccf0c34a056e3ccafac4a0c7effef14d918)
|
||||
---
|
||||
NEWS | 6 ++++++
|
||||
manual/threads.texi | 8 ++++++--
|
||||
sysdeps/nptl/dl-tls_init_tp.c | 8 +-------
|
||||
sysdeps/unix/sysv/linux/rseq-internal.h | 23 +++++++++++++++++++++--
|
||||
sysdeps/unix/sysv/linux/tst-rseq.c | 10 +++++++++-
|
||||
5 files changed, 43 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index 6768c2da6f..f0a0834496 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -7,6 +7,11 @@ using `glibc' in the "product" field.
|
||||
|
||||
Version 2.38.1
|
||||
|
||||
+Deprecated and removed features, and other changes affecting compatibility:
|
||||
+
|
||||
+* __rseq_size now denotes the size of the active rseq area (20 bytes
|
||||
+ initially), not the size of struct rseq (32 bytes initially).
|
||||
+
|
||||
Security related changes:
|
||||
|
||||
CVE-2023-4527: If the system is configured in no-aaaa mode via
|
||||
@@ -46,6 +51,7 @@ The following bugs are resolved with this release:
|
||||
[31183] Wide stream buffer size reduced MB_LEN_MAX bytes after bug 17522 fix
|
||||
[31184] FAIL: elf/tst-tlsgap
|
||||
[31185] Incorrect thread point access in _dl_tlsdesc_undefweak and _dl_tlsdesc_dynamic
|
||||
+ [31965] rseq extension mechanism does not work as intended
|
||||
|
||||
|
||||
Version 2.38
|
||||
diff --git a/manual/threads.texi b/manual/threads.texi
|
||||
index e5544ff3da..25e99c9606 100644
|
||||
--- a/manual/threads.texi
|
||||
+++ b/manual/threads.texi
|
||||
@@ -1007,8 +1007,12 @@ This variable is either zero (if restartable sequence registration
|
||||
failed or has been disabled) or the size of the restartable sequence
|
||||
registration. This can be different from the size of @code{struct rseq}
|
||||
if the kernel has extended the size of the registration. If
|
||||
-registration is successful, @code{__rseq_size} is at least 32 (the
|
||||
-initial size of @code{struct rseq}).
|
||||
+registration is successful, @code{__rseq_size} is at least 20 (the
|
||||
+initially active size of @code{struct rseq}).
|
||||
+
|
||||
+Previous versions of @theglibc{} set this to 32 even if the kernel only
|
||||
+supported the initial area of 20 bytes because the value included unused
|
||||
+padding at the end of the restartable sequence area.
|
||||
@end deftypevar
|
||||
|
||||
@deftypevar {unsigned int} __rseq_flags
|
||||
diff --git a/sysdeps/nptl/dl-tls_init_tp.c b/sysdeps/nptl/dl-tls_init_tp.c
|
||||
index 45ae260ceb..8f731393c4 100644
|
||||
--- a/sysdeps/nptl/dl-tls_init_tp.c
|
||||
+++ b/sysdeps/nptl/dl-tls_init_tp.c
|
||||
@@ -46,10 +46,6 @@ rtld_mutex_dummy (pthread_mutex_t *lock)
|
||||
|
||||
const unsigned int __rseq_flags;
|
||||
|
||||
-/* The variables are in .data.relro but are not yet write-protected. */
|
||||
-extern unsigned int _rseq_size attribute_hidden;
|
||||
-extern ptrdiff_t _rseq_offset attribute_hidden;
|
||||
-
|
||||
void
|
||||
__tls_pre_init_tp (void)
|
||||
{
|
||||
@@ -106,9 +102,7 @@ __tls_init_tp (void)
|
||||
bool do_rseq = true;
|
||||
do_rseq = TUNABLE_GET (rseq, int, NULL);
|
||||
if (rseq_register_current_thread (pd, do_rseq))
|
||||
- {
|
||||
- _rseq_size = sizeof (pd->rseq_area);
|
||||
- }
|
||||
+ _rseq_size = RSEQ_AREA_SIZE_INITIAL_USED;
|
||||
|
||||
#ifdef RSEQ_SIG
|
||||
/* This should be a compile-time constant, but the current
|
||||
diff --git a/sysdeps/unix/sysv/linux/rseq-internal.h b/sysdeps/unix/sysv/linux/rseq-internal.h
|
||||
index 294880c04e..226ba59a24 100644
|
||||
--- a/sysdeps/unix/sysv/linux/rseq-internal.h
|
||||
+++ b/sysdeps/unix/sysv/linux/rseq-internal.h
|
||||
@@ -25,15 +25,34 @@
|
||||
#include <stdio.h>
|
||||
#include <sys/rseq.h>
|
||||
|
||||
+/* 32 is the initially required value for the area size. The
|
||||
+ actually used rseq size may be less (20 bytes initially). */
|
||||
+#define RSEQ_AREA_SIZE_INITIAL 32
|
||||
+#define RSEQ_AREA_SIZE_INITIAL_USED 20
|
||||
+
|
||||
+/* The variables are in .data.relro but are not yet write-protected. */
|
||||
+extern unsigned int _rseq_size attribute_hidden;
|
||||
+extern ptrdiff_t _rseq_offset attribute_hidden;
|
||||
+
|
||||
#ifdef RSEQ_SIG
|
||||
static inline bool
|
||||
rseq_register_current_thread (struct pthread *self, bool do_rseq)
|
||||
{
|
||||
if (do_rseq)
|
||||
{
|
||||
+ unsigned int size;
|
||||
+#if IS_IN (rtld)
|
||||
+ /* Use the hidden symbol in ld.so. */
|
||||
+ size = _rseq_size;
|
||||
+#else
|
||||
+ size = __rseq_size;
|
||||
+#endif
|
||||
+ if (size < RSEQ_AREA_SIZE_INITIAL)
|
||||
+ /* The initial implementation used only 20 bytes out of 32,
|
||||
+ but still expected size 32. */
|
||||
+ size = RSEQ_AREA_SIZE_INITIAL;
|
||||
int ret = INTERNAL_SYSCALL_CALL (rseq, &self->rseq_area,
|
||||
- sizeof (self->rseq_area),
|
||||
- 0, RSEQ_SIG);
|
||||
+ size, 0, RSEQ_SIG);
|
||||
if (!INTERNAL_SYSCALL_ERROR_P (ret))
|
||||
return true;
|
||||
}
|
||||
diff --git a/sysdeps/unix/sysv/linux/tst-rseq.c b/sysdeps/unix/sysv/linux/tst-rseq.c
|
||||
index 16983503b1..9f9aa7eb21 100644
|
||||
--- a/sysdeps/unix/sysv/linux/tst-rseq.c
|
||||
+++ b/sysdeps/unix/sysv/linux/tst-rseq.c
|
||||
@@ -29,6 +29,7 @@
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
# include <syscall.h>
|
||||
+# include <sys/auxv.h>
|
||||
# include <thread_pointer.h>
|
||||
# include <tls.h>
|
||||
# include "tst-rseq.h"
|
||||
@@ -42,7 +43,8 @@ do_rseq_main_test (void)
|
||||
TEST_COMPARE (__rseq_flags, 0);
|
||||
TEST_VERIFY ((char *) __thread_pointer () + __rseq_offset
|
||||
== (char *) &pd->rseq_area);
|
||||
- TEST_COMPARE (__rseq_size, sizeof (pd->rseq_area));
|
||||
+ /* The current implementation only supports the initial size. */
|
||||
+ TEST_COMPARE (__rseq_size, 20);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -52,6 +54,12 @@ do_rseq_test (void)
|
||||
{
|
||||
FAIL_UNSUPPORTED ("kernel does not support rseq, skipping test");
|
||||
}
|
||||
+ printf ("info: __rseq_size: %u\n", __rseq_size);
|
||||
+ printf ("info: __rseq_offset: %td\n", __rseq_offset);
|
||||
+ printf ("info: __rseq_flags: %u\n", __rseq_flags);
|
||||
+ printf ("info: getauxval (AT_RSEQ_FEATURE_SIZE): %ld\n",
|
||||
+ getauxval (AT_RSEQ_FEATURE_SIZE));
|
||||
+ printf ("info: getauxval (AT_RSEQ_ALIGN): %ld\n", getauxval (AT_RSEQ_ALIGN));
|
||||
do_rseq_main_test ();
|
||||
}
|
||||
#else /* RSEQ_SIG */
|
||||
--
|
||||
2.33.0
|
||||
|
||||
223
0005-resolv-Allow-short-error-responses-to-match-any-quer.patch
Normal file
223
0005-resolv-Allow-short-error-responses-to-match-any-quer.patch
Normal file
@ -0,0 +1,223 @@
|
||||
From dc512364e8490facb30f8c23fcc496d21adfc4e4 Mon Sep 17 00:00:00 2001
|
||||
From: Florian Weimer <fweimer@redhat.com>
|
||||
Date: Wed, 24 Jul 2024 12:06:47 +0200
|
||||
Subject: [PATCH 05/12] resolv: Allow short error responses to match any query
|
||||
(bug 31890)
|
||||
|
||||
Reviewed-by: DJ Delorie <dj@redhat.com>
|
||||
(cherry picked from commit 691a3b2e9bfaba842e46a5ccb7f5e6ea144c3ade)
|
||||
---
|
||||
NEWS | 1 +
|
||||
resolv/Makefile | 3 +
|
||||
resolv/res_send.c | 29 +++++---
|
||||
resolv/tst-resolv-short-response.c | 112 +++++++++++++++++++++++++++++
|
||||
4 files changed, 135 insertions(+), 10 deletions(-)
|
||||
create mode 100644 resolv/tst-resolv-short-response.c
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index f0a0834496..c331604747 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -51,6 +51,7 @@ The following bugs are resolved with this release:
|
||||
[31183] Wide stream buffer size reduced MB_LEN_MAX bytes after bug 17522 fix
|
||||
[31184] FAIL: elf/tst-tlsgap
|
||||
[31185] Incorrect thread point access in _dl_tlsdesc_undefweak and _dl_tlsdesc_dynamic
|
||||
+ [31890] resolv: Allow short error responses to match any DNS query
|
||||
[31965] rseq extension mechanism does not work as intended
|
||||
|
||||
|
||||
diff --git a/resolv/Makefile b/resolv/Makefile
|
||||
index 2f99eb3862..cca0748f9a 100644
|
||||
--- a/resolv/Makefile
|
||||
+++ b/resolv/Makefile
|
||||
@@ -106,6 +106,7 @@ tests += \
|
||||
tst-resolv-nondecimal \
|
||||
tst-resolv-res_init-multi \
|
||||
tst-resolv-search \
|
||||
+ tst-resolv-short-response \
|
||||
tst-resolv-trailing \
|
||||
|
||||
# This test calls __res_context_send directly, which is not exported
|
||||
@@ -299,6 +300,8 @@ $(objpfx)tst-resolv-nondecimal: $(objpfx)libresolv.so $(shared-thread-library)
|
||||
$(objpfx)tst-resolv-qtypes: $(objpfx)libresolv.so $(shared-thread-library)
|
||||
$(objpfx)tst-resolv-rotate: $(objpfx)libresolv.so $(shared-thread-library)
|
||||
$(objpfx)tst-resolv-search: $(objpfx)libresolv.so $(shared-thread-library)
|
||||
+$(objpfx)tst-resolv-short-response: $(objpfx)libresolv.so \
|
||||
+ $(shared-thread-library)
|
||||
$(objpfx)tst-resolv-trailing: $(objpfx)libresolv.so $(shared-thread-library)
|
||||
$(objpfx)tst-resolv-threads: $(objpfx)libresolv.so $(shared-thread-library)
|
||||
$(objpfx)tst-resolv-txnid-collision: $(objpfx)libresolv.a \
|
||||
diff --git a/resolv/res_send.c b/resolv/res_send.c
|
||||
index d098eba470..bf4ce67b1d 100644
|
||||
--- a/resolv/res_send.c
|
||||
+++ b/resolv/res_send.c
|
||||
@@ -1197,19 +1197,30 @@ send_dg(res_state statp,
|
||||
}
|
||||
|
||||
/* Check for the correct header layout and a matching
|
||||
- question. */
|
||||
+ question. Some recursive resolvers send REFUSED
|
||||
+ without copying back the question section
|
||||
+ (producing a response that is only HFIXEDSZ bytes
|
||||
+ long). Skip query matching in this case. */
|
||||
+ bool thisansp_error = (anhp->rcode == SERVFAIL ||
|
||||
+ anhp->rcode == NOTIMP ||
|
||||
+ anhp->rcode == REFUSED);
|
||||
+ bool skip_query_match = (*thisresplenp == HFIXEDSZ
|
||||
+ && ntohs (anhp->qdcount) == 0
|
||||
+ && thisansp_error);
|
||||
int matching_query = 0; /* Default to no matching query. */
|
||||
if (!recvresp1
|
||||
&& anhp->id == hp->id
|
||||
- && __libc_res_queriesmatch (buf, buf + buflen,
|
||||
- *thisansp,
|
||||
- *thisansp + *thisanssizp))
|
||||
+ && (skip_query_match
|
||||
+ || __libc_res_queriesmatch (buf, buf + buflen,
|
||||
+ *thisansp,
|
||||
+ *thisansp + *thisanssizp)))
|
||||
matching_query = 1;
|
||||
if (!recvresp2
|
||||
&& anhp->id == hp2->id
|
||||
- && __libc_res_queriesmatch (buf2, buf2 + buflen2,
|
||||
- *thisansp,
|
||||
- *thisansp + *thisanssizp))
|
||||
+ && (skip_query_match
|
||||
+ || __libc_res_queriesmatch (buf2, buf2 + buflen2,
|
||||
+ *thisansp,
|
||||
+ *thisansp + *thisanssizp)))
|
||||
matching_query = 2;
|
||||
if (matching_query == 0)
|
||||
/* Spurious UDP packet. Drop it and continue
|
||||
@@ -1219,9 +1230,7 @@ send_dg(res_state statp,
|
||||
goto wait;
|
||||
}
|
||||
|
||||
- if (anhp->rcode == SERVFAIL ||
|
||||
- anhp->rcode == NOTIMP ||
|
||||
- anhp->rcode == REFUSED) {
|
||||
+ if (thisansp_error) {
|
||||
next_ns:
|
||||
if (recvresp1 || (buf2 != NULL && recvresp2)) {
|
||||
*resplen2 = 0;
|
||||
diff --git a/resolv/tst-resolv-short-response.c b/resolv/tst-resolv-short-response.c
|
||||
new file mode 100644
|
||||
index 0000000000..cf1e39876f
|
||||
--- /dev/null
|
||||
+++ b/resolv/tst-resolv-short-response.c
|
||||
@@ -0,0 +1,112 @@
|
||||
+/* Test for spurious timeouts with short 12-byte responses (bug 31890).
|
||||
+ Copyright (C) 2024 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <https://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <resolv.h>
|
||||
+#include <support/check.h>
|
||||
+#include <support/resolv_test.h>
|
||||
+#include <support/check_nss.h>
|
||||
+
|
||||
+/* The rcode in the initial response. */
|
||||
+static volatile int rcode;
|
||||
+
|
||||
+static void
|
||||
+response (const struct resolv_response_context *ctx,
|
||||
+ struct resolv_response_builder *b,
|
||||
+ const char *qname, uint16_t qclass, uint16_t qtype)
|
||||
+{
|
||||
+ switch (ctx->server_index)
|
||||
+ {
|
||||
+ case 0:
|
||||
+ /* First server times out. */
|
||||
+ struct resolv_response_flags flags = {.rcode = rcode};
|
||||
+ resolv_response_init (b, flags);
|
||||
+ break;
|
||||
+ case 1:
|
||||
+ /* Second server sends reply. */
|
||||
+ resolv_response_init (b, (struct resolv_response_flags) {});
|
||||
+ resolv_response_add_question (b, qname, qclass, qtype);
|
||||
+ resolv_response_section (b, ns_s_an);
|
||||
+ resolv_response_open_record (b, qname, qclass, qtype, 0);
|
||||
+ switch (qtype)
|
||||
+ {
|
||||
+ case T_A:
|
||||
+ {
|
||||
+ char ipv4[4] = {192, 0, 2, 17};
|
||||
+ resolv_response_add_data (b, &ipv4, sizeof (ipv4));
|
||||
+ }
|
||||
+ break;
|
||||
+ case T_AAAA:
|
||||
+ {
|
||||
+ char ipv6[16]
|
||||
+ = {0x20, 0x01, 0xd, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
|
||||
+ resolv_response_add_data (b, &ipv6, sizeof (ipv6));
|
||||
+ }
|
||||
+ break;
|
||||
+ default:
|
||||
+ FAIL_EXIT1 ("unexpected TYPE%d query", qtype);
|
||||
+ }
|
||||
+ resolv_response_close_record (b);
|
||||
+ break;
|
||||
+ default:
|
||||
+ FAIL_EXIT1 ("unexpected query to server %d", ctx->server_index);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+check_one (void)
|
||||
+{
|
||||
+
|
||||
+ /* The buggy 1-second query timeout results in 30 seconds of delay,
|
||||
+ which triggers a test timeout failure. */
|
||||
+ for (int i = 0; i < 10; ++i)
|
||||
+ {
|
||||
+ check_hostent ("www.example", gethostbyname ("www.example"),
|
||||
+ "name: www.example\n"
|
||||
+ "address: 192.0.2.17\n");
|
||||
+ check_hostent ("www.example", gethostbyname2 ("www.example", AF_INET6),
|
||||
+ "name: www.example\n"
|
||||
+ "address: 2001:db8::1\n");
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+do_test (void)
|
||||
+{
|
||||
+ struct resolv_test *aux = resolv_test_start
|
||||
+ ((struct resolv_redirect_config)
|
||||
+ {
|
||||
+ .response_callback = response,
|
||||
+ });
|
||||
+
|
||||
+ _res.options |= RES_SNGLKUP;
|
||||
+
|
||||
+ rcode = 2; /* SERVFAIL. */
|
||||
+ check_one ();
|
||||
+
|
||||
+ rcode = 4; /* NOTIMP. */
|
||||
+ check_one ();
|
||||
+
|
||||
+ rcode = 5; /* REFUSED. */
|
||||
+ check_one ();
|
||||
+
|
||||
+ resolv_test_end (aux);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+#include <support/test-driver.c>
|
||||
--
|
||||
2.33.0
|
||||
|
||||
232
0006-resolv-Do-not-wait-for-non-existing-second-DNS-respo.patch
Normal file
232
0006-resolv-Do-not-wait-for-non-existing-second-DNS-respo.patch
Normal file
@ -0,0 +1,232 @@
|
||||
From 6cad0f543ccac5abd35a3a617fab72a9c8c64155 Mon Sep 17 00:00:00 2001
|
||||
From: Florian Weimer <fweimer@redhat.com>
|
||||
Date: Wed, 24 Jul 2024 12:06:47 +0200
|
||||
Subject: [PATCH 06/12] resolv: Do not wait for non-existing second DNS
|
||||
response after error (bug 30081)
|
||||
|
||||
In single-request mode, there is no second response after an error
|
||||
because the second query has not been sent yet. Waiting for it
|
||||
introduces an unnecessary timeout.
|
||||
|
||||
Reviewed-by: DJ Delorie <dj@redhat.com>
|
||||
(cherry picked from commit af625987d619388a100b153520d3ee308bda9889)
|
||||
---
|
||||
NEWS | 1 +
|
||||
resolv/Makefile | 3 +
|
||||
resolv/res_send.c | 2 +-
|
||||
resolv/tst-resolv-semi-failure.c | 133 +++++++++++++++++++++++++++++
|
||||
resolv/tst-resolv-short-response.c | 12 +++
|
||||
5 files changed, 150 insertions(+), 1 deletion(-)
|
||||
create mode 100644 resolv/tst-resolv-semi-failure.c
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index c331604747..4156a017ac 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -37,6 +37,7 @@ Security related changes:
|
||||
The following bugs are resolved with this release:
|
||||
|
||||
[29039] Corrupt DTV after reuse of a TLS module ID following dlclose with unused TLS
|
||||
+ [30081] resolv: Do not wait for non-existing second DNS response after error
|
||||
[30694] The iconv program no longer tells the user which given encoding name was wrong
|
||||
[30709] nscd fails to build with cleanup handler if built with -fexceptions
|
||||
[30721] x86_64: Fix build with --disable-multiarch
|
||||
diff --git a/resolv/Makefile b/resolv/Makefile
|
||||
index cca0748f9a..b53a5fcfdb 100644
|
||||
--- a/resolv/Makefile
|
||||
+++ b/resolv/Makefile
|
||||
@@ -106,6 +106,7 @@ tests += \
|
||||
tst-resolv-nondecimal \
|
||||
tst-resolv-res_init-multi \
|
||||
tst-resolv-search \
|
||||
+ tst-resolv-semi-failure \
|
||||
tst-resolv-short-response \
|
||||
tst-resolv-trailing \
|
||||
|
||||
@@ -300,6 +301,8 @@ $(objpfx)tst-resolv-nondecimal: $(objpfx)libresolv.so $(shared-thread-library)
|
||||
$(objpfx)tst-resolv-qtypes: $(objpfx)libresolv.so $(shared-thread-library)
|
||||
$(objpfx)tst-resolv-rotate: $(objpfx)libresolv.so $(shared-thread-library)
|
||||
$(objpfx)tst-resolv-search: $(objpfx)libresolv.so $(shared-thread-library)
|
||||
+$(objpfx)tst-resolv-semi-failure: $(objpfx)libresolv.so \
|
||||
+ $(shared-thread-library)
|
||||
$(objpfx)tst-resolv-short-response: $(objpfx)libresolv.so \
|
||||
$(shared-thread-library)
|
||||
$(objpfx)tst-resolv-trailing: $(objpfx)libresolv.so $(shared-thread-library)
|
||||
diff --git a/resolv/res_send.c b/resolv/res_send.c
|
||||
index bf4ce67b1d..b741b42cae 100644
|
||||
--- a/resolv/res_send.c
|
||||
+++ b/resolv/res_send.c
|
||||
@@ -1236,7 +1236,7 @@ send_dg(res_state statp,
|
||||
*resplen2 = 0;
|
||||
return resplen;
|
||||
}
|
||||
- if (buf2 != NULL)
|
||||
+ if (buf2 != NULL && !single_request)
|
||||
{
|
||||
/* No data from the first reply. */
|
||||
resplen = 0;
|
||||
diff --git a/resolv/tst-resolv-semi-failure.c b/resolv/tst-resolv-semi-failure.c
|
||||
new file mode 100644
|
||||
index 0000000000..aa9798b5a7
|
||||
--- /dev/null
|
||||
+++ b/resolv/tst-resolv-semi-failure.c
|
||||
@@ -0,0 +1,133 @@
|
||||
+/* Test parallel failure/success responses (bug 30081).
|
||||
+ Copyright (C) 2024 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <https://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <resolv.h>
|
||||
+#include <support/check.h>
|
||||
+#include <support/resolv_test.h>
|
||||
+#include <support/check_nss.h>
|
||||
+
|
||||
+/* The rcode in the initial response. */
|
||||
+static volatile int rcode;
|
||||
+
|
||||
+/* Whether to fail the initial A query (!fail_aaaa) or the initial
|
||||
+ AAAA query (fail_aaaa). */
|
||||
+static volatile bool fail_aaaa;
|
||||
+
|
||||
+static void
|
||||
+response (const struct resolv_response_context *ctx,
|
||||
+ struct resolv_response_builder *b,
|
||||
+ const char *qname, uint16_t qclass, uint16_t qtype)
|
||||
+{
|
||||
+ /* Handle the failing query. */
|
||||
+ if ((fail_aaaa && qtype == T_AAAA) && ctx->server_index == 0)
|
||||
+ {
|
||||
+ struct resolv_response_flags flags = {.rcode = rcode};
|
||||
+ resolv_response_init (b, flags);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ /* Otherwise produce a response. */
|
||||
+ resolv_response_init (b, (struct resolv_response_flags) {});
|
||||
+ resolv_response_add_question (b, qname, qclass, qtype);
|
||||
+ resolv_response_section (b, ns_s_an);
|
||||
+ resolv_response_open_record (b, qname, qclass, qtype, 0);
|
||||
+ switch (qtype)
|
||||
+ {
|
||||
+ case T_A:
|
||||
+ {
|
||||
+ char ipv4[4] = {192, 0, 2, 17};
|
||||
+ resolv_response_add_data (b, &ipv4, sizeof (ipv4));
|
||||
+ }
|
||||
+ break;
|
||||
+ case T_AAAA:
|
||||
+ {
|
||||
+ char ipv6[16]
|
||||
+ = {0x20, 0x01, 0xd, 0xb8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1};
|
||||
+ resolv_response_add_data (b, &ipv6, sizeof (ipv6));
|
||||
+ }
|
||||
+ break;
|
||||
+ default:
|
||||
+ FAIL_EXIT1 ("unexpected TYPE%d query", qtype);
|
||||
+ }
|
||||
+ resolv_response_close_record (b);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+check_one (void)
|
||||
+{
|
||||
+
|
||||
+ /* The buggy 1-second query timeout results in 30 seconds of delay,
|
||||
+ which triggers are test timeout failure. */
|
||||
+ for (int i = 0; i < 30; ++i)
|
||||
+ {
|
||||
+ static const struct addrinfo hints =
|
||||
+ {
|
||||
+ .ai_family = AF_UNSPEC,
|
||||
+ .ai_socktype = SOCK_STREAM,
|
||||
+ };
|
||||
+ struct addrinfo *ai;
|
||||
+ int ret = getaddrinfo ("www.example", "80", &hints, &ai);
|
||||
+ const char *expected;
|
||||
+ if (ret == 0 && ai->ai_next != NULL)
|
||||
+ expected = ("address: STREAM/TCP 192.0.2.17 80\n"
|
||||
+ "address: STREAM/TCP 2001:db8::1 80\n");
|
||||
+ else
|
||||
+ /* Only one response because the AAAA lookup failure is
|
||||
+ treated as an ignoreable error. */
|
||||
+ expected = "address: STREAM/TCP 192.0.2.17 80\n";
|
||||
+ check_addrinfo ("www.example", ai, ret, expected);
|
||||
+ if (ret == 0)
|
||||
+ freeaddrinfo (ai);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+do_test (void)
|
||||
+{
|
||||
+ for (int do_single_lookup = 0; do_single_lookup < 2; ++do_single_lookup)
|
||||
+ {
|
||||
+ struct resolv_test *aux = resolv_test_start
|
||||
+ ((struct resolv_redirect_config)
|
||||
+ {
|
||||
+ .response_callback = response,
|
||||
+ });
|
||||
+
|
||||
+ if (do_single_lookup)
|
||||
+ _res.options |= RES_SNGLKUP;
|
||||
+
|
||||
+ for (int do_fail_aaaa = 0; do_fail_aaaa < 2; ++do_fail_aaaa)
|
||||
+ {
|
||||
+ fail_aaaa = do_fail_aaaa;
|
||||
+
|
||||
+ rcode = 2; /* SERVFAIL. */
|
||||
+ check_one ();
|
||||
+
|
||||
+ rcode = 4; /* NOTIMP. */
|
||||
+ check_one ();
|
||||
+
|
||||
+ rcode = 5; /* REFUSED. */
|
||||
+ check_one ();
|
||||
+ }
|
||||
+
|
||||
+ resolv_test_end (aux);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+#include <support/test-driver.c>
|
||||
diff --git a/resolv/tst-resolv-short-response.c b/resolv/tst-resolv-short-response.c
|
||||
index cf1e39876f..be354ae1c7 100644
|
||||
--- a/resolv/tst-resolv-short-response.c
|
||||
+++ b/resolv/tst-resolv-short-response.c
|
||||
@@ -81,6 +81,18 @@ check_one (void)
|
||||
check_hostent ("www.example", gethostbyname2 ("www.example", AF_INET6),
|
||||
"name: www.example\n"
|
||||
"address: 2001:db8::1\n");
|
||||
+ static const struct addrinfo hints =
|
||||
+ {
|
||||
+ .ai_family = AF_UNSPEC,
|
||||
+ .ai_socktype = SOCK_STREAM,
|
||||
+ };
|
||||
+ struct addrinfo *ai;
|
||||
+ int ret = getaddrinfo ("www.example", "80", &hints, &ai);
|
||||
+ check_addrinfo ("www.example", ai, ret,
|
||||
+ "address: STREAM/TCP 192.0.2.17 80\n"
|
||||
+ "address: STREAM/TCP 2001:db8::1 80\n");
|
||||
+ if (ret == 0)
|
||||
+ freeaddrinfo (ai);
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.33.0
|
||||
|
||||
@ -0,0 +1,81 @@
|
||||
From 1bed6acf50f6fdedf5a501cbd6a8225e5c13b886 Mon Sep 17 00:00:00 2001
|
||||
From: Florian Weimer <fweimer@redhat.com>
|
||||
Date: Thu, 13 Jun 2024 18:56:30 +0200
|
||||
Subject: [PATCH 07/12] resolv: Track single-request fallback via _res._flags
|
||||
(bug 31476)
|
||||
|
||||
This avoids changing _res.options, which inteferes with change
|
||||
detection as part of automatic reloading of /etc/resolv.conf.
|
||||
|
||||
Reviewed-by: DJ Delorie <dj@redhat.com>
|
||||
(cherry picked from commit 868ab8923a2ec977faafec97ecafac0c3159c1b2)
|
||||
---
|
||||
NEWS | 1 +
|
||||
resolv/res_send.c | 12 +++++++-----
|
||||
resolv/resolv-internal.h | 2 ++
|
||||
3 files changed, 10 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index 4156a017ac..3b252c96b4 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -52,6 +52,7 @@ The following bugs are resolved with this release:
|
||||
[31183] Wide stream buffer size reduced MB_LEN_MAX bytes after bug 17522 fix
|
||||
[31184] FAIL: elf/tst-tlsgap
|
||||
[31185] Incorrect thread point access in _dl_tlsdesc_undefweak and _dl_tlsdesc_dynamic
|
||||
+ [31476] resolv: Track single-request fallback via _res._flags
|
||||
[31890] resolv: Allow short error responses to match any DNS query
|
||||
[31965] rseq extension mechanism does not work as intended
|
||||
|
||||
diff --git a/resolv/res_send.c b/resolv/res_send.c
|
||||
index b741b42cae..1b130b4df4 100644
|
||||
--- a/resolv/res_send.c
|
||||
+++ b/resolv/res_send.c
|
||||
@@ -947,9 +947,11 @@ send_dg(res_state statp,
|
||||
seconds /= statp->nscount;
|
||||
if (seconds <= 0)
|
||||
seconds = 1;
|
||||
- bool single_request_reopen = (statp->options & RES_SNGLKUPREOP) != 0;
|
||||
- bool single_request = (((statp->options & RES_SNGLKUP) != 0)
|
||||
- | single_request_reopen);
|
||||
+ bool single_request_reopen = ((statp->options & RES_SNGLKUPREOP)
|
||||
+ || (statp->_flags & RES_F_SNGLKUPREOP));
|
||||
+ bool single_request = ((statp->options & RES_SNGLKUP)
|
||||
+ || (statp->_flags & RES_F_SNGLKUP)
|
||||
+ || single_request_reopen);
|
||||
int save_gotsomewhere = *gotsomewhere;
|
||||
|
||||
int retval;
|
||||
@@ -1006,14 +1008,14 @@ send_dg(res_state statp,
|
||||
have received the first answer. */
|
||||
if (!single_request)
|
||||
{
|
||||
- statp->options |= RES_SNGLKUP;
|
||||
+ statp->_flags |= RES_F_SNGLKUP;
|
||||
single_request = true;
|
||||
*gotsomewhere = save_gotsomewhere;
|
||||
goto retry;
|
||||
}
|
||||
else if (!single_request_reopen)
|
||||
{
|
||||
- statp->options |= RES_SNGLKUPREOP;
|
||||
+ statp->_flags |= RES_F_SNGLKUPREOP;
|
||||
single_request_reopen = true;
|
||||
*gotsomewhere = save_gotsomewhere;
|
||||
__res_iclose (statp, false);
|
||||
diff --git a/resolv/resolv-internal.h b/resolv/resolv-internal.h
|
||||
index 2b98ac4920..3fa81d784f 100644
|
||||
--- a/resolv/resolv-internal.h
|
||||
+++ b/resolv/resolv-internal.h
|
||||
@@ -26,6 +26,8 @@
|
||||
#define RES_F_VC 0x00000001 /* Socket is TCP. */
|
||||
#define RES_F_CONN 0x00000002 /* Socket is connected. */
|
||||
#define RES_F_EDNS0ERR 0x00000004 /* EDNS0 caused errors. */
|
||||
+#define RES_F_SNGLKUP 0x00200000 /* Private version of RES_SNGLKUP. */
|
||||
+#define RES_F_SNGLKUPREOP 0x00400000 /* Private version of RES_SNGLKUPREOP. */
|
||||
|
||||
/* The structure HEADER is normally aligned on a word boundary. In
|
||||
some code, we need to access this structure when it may be aligned
|
||||
--
|
||||
2.33.0
|
||||
|
||||
68
0008-linux-Update-the-mremap-C-implementation-BZ-31968.patch
Normal file
68
0008-linux-Update-the-mremap-C-implementation-BZ-31968.patch
Normal file
@ -0,0 +1,68 @@
|
||||
From 0301637b9931766ee389aedf3899cde756b37283 Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Wed, 24 Jul 2024 14:05:13 -0700
|
||||
Subject: [PATCH 08/12] linux: Update the mremap C implementation [BZ #31968]
|
||||
|
||||
Update the mremap C implementation to support the optional argument for
|
||||
MREMAP_DONTUNMAP added in Linux 5.7 since it may not always be correct
|
||||
to implement a variadic function as a non-variadic function on all Linux
|
||||
targets. Return MAP_FAILED and set errno to EINVAL for unknown flag bits.
|
||||
This fixes BZ #31968.
|
||||
|
||||
Note: A test must be added when a new flag bit is introduced.
|
||||
|
||||
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
|
||||
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
(cherry picked from commit 6c40cb0e9f893d49dc7caee580a055de53562206)
|
||||
---
|
||||
NEWS | 1 +
|
||||
sysdeps/unix/sysv/linux/mremap.c | 14 +++++++++++++-
|
||||
2 files changed, 14 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/NEWS b/NEWS
|
||||
index 3b252c96b4..5172049eb2 100644
|
||||
--- a/NEWS
|
||||
+++ b/NEWS
|
||||
@@ -55,6 +55,7 @@ The following bugs are resolved with this release:
|
||||
[31476] resolv: Track single-request fallback via _res._flags
|
||||
[31890] resolv: Allow short error responses to match any DNS query
|
||||
[31965] rseq extension mechanism does not work as intended
|
||||
+ [31968] mremap implementation in C does not handle arguments correctly
|
||||
|
||||
|
||||
Version 2.38
|
||||
diff --git a/sysdeps/unix/sysv/linux/mremap.c b/sysdeps/unix/sysv/linux/mremap.c
|
||||
index 0ad5da86a2..05ed8febfa 100644
|
||||
--- a/sysdeps/unix/sysv/linux/mremap.c
|
||||
+++ b/sysdeps/unix/sysv/linux/mremap.c
|
||||
@@ -20,6 +20,12 @@
|
||||
#include <sysdep.h>
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
+#include <errno.h>
|
||||
+
|
||||
+#define MREMAP_KNOWN_BITS \
|
||||
+ (MREMAP_MAYMOVE \
|
||||
+ | MREMAP_FIXED \
|
||||
+ | MREMAP_DONTUNMAP)
|
||||
|
||||
void *
|
||||
__mremap (void *addr, size_t old_len, size_t new_len, int flags, ...)
|
||||
@@ -27,7 +33,13 @@ __mremap (void *addr, size_t old_len, size_t new_len, int flags, ...)
|
||||
va_list va;
|
||||
void *new_addr = NULL;
|
||||
|
||||
- if (flags & MREMAP_FIXED)
|
||||
+ if (flags & ~(MREMAP_KNOWN_BITS))
|
||||
+ {
|
||||
+ __set_errno (EINVAL);
|
||||
+ return MAP_FAILED;
|
||||
+ }
|
||||
+
|
||||
+ if (flags & (MREMAP_FIXED | MREMAP_DONTUNMAP))
|
||||
{
|
||||
va_start (va, flags);
|
||||
new_addr = va_arg (va, void *);
|
||||
--
|
||||
2.33.0
|
||||
|
||||
88
0009-mremap-Update-manual-entry.patch
Normal file
88
0009-mremap-Update-manual-entry.patch
Normal file
@ -0,0 +1,88 @@
|
||||
From f0e211453546a134ac27e1e54579332534acb349 Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Wed, 24 Jul 2024 14:05:14 -0700
|
||||
Subject: [PATCH 09/12] mremap: Update manual entry
|
||||
|
||||
Update mremap manual entry:
|
||||
|
||||
1. Change mremap to variadic.
|
||||
2. Document MREMAP_FIXED and MREMAP_DONTUNMAP.
|
||||
|
||||
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
|
||||
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
(cherry picked from commit cb2dee4eccf46642eef588bee64f9c875c408f1c)
|
||||
---
|
||||
manual/llio.texi | 42 +++++++++++++++++++++++++++++++++++-------
|
||||
1 file changed, 35 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/manual/llio.texi b/manual/llio.texi
|
||||
index fae49d1433..a65230d612 100644
|
||||
--- a/manual/llio.texi
|
||||
+++ b/manual/llio.texi
|
||||
@@ -1781,7 +1781,7 @@ There is no existing mapping in at least part of the given region.
|
||||
|
||||
@end deftypefun
|
||||
|
||||
-@deftypefun {void *} mremap (void *@var{address}, size_t @var{length}, size_t @var{new_length}, int @var{flag})
|
||||
+@deftypefun {void *} mremap (void *@var{address}, size_t @var{length}, size_t @var{new_length}, int @var{flag}, ... /* void *@var{new_address} */)
|
||||
@standards{GNU, sys/mman.h}
|
||||
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
|
||||
|
||||
@@ -1790,12 +1790,40 @@ area. @var{address} and @var{length} must cover a region entirely mapped
|
||||
in the same @code{mmap} statement. A new mapping with the same
|
||||
characteristics will be returned with the length @var{new_length}.
|
||||
|
||||
-One option is possible, @code{MREMAP_MAYMOVE}. If it is given in
|
||||
-@var{flags}, the system may remove the existing mapping and create a new
|
||||
-one of the desired length in another location.
|
||||
+Possible flags are
|
||||
|
||||
-The address of the resulting mapping is returned, or @math{-1}. Possible
|
||||
-error codes include:
|
||||
+@table @code
|
||||
+
|
||||
+@item MREMAP_MAYMOVE
|
||||
+If it is given in @var{flags}, the system may remove the existing mapping
|
||||
+and create a new one of the desired length in another location.
|
||||
+
|
||||
+@item MREMAP_FIXED
|
||||
+If it is given in @var{flags}, @code{mremap} accepts a fifth argument,
|
||||
+@code{void *new_address}, which specifies a page-aligned address to
|
||||
+which the mapping must be moved. Any previous mapping at the address
|
||||
+range specified by @var{new_address} and @var{new_size} is unmapped.
|
||||
+
|
||||
+@code{MREMAP_FIXED} must be used together with @code{MREMAP_MAYMOVE}.
|
||||
+
|
||||
+@item MREMAP_DONTUNMAP
|
||||
+If it is given in @var{flags}, @code{mremap} accepts a fifth argument,
|
||||
+@code{void *new_address}, which specifies a page-aligned address. Any
|
||||
+previous mapping at the address range specified by @var{new_address} and
|
||||
+@var{new_size} is unmapped. If @var{new_address} is @code{NULL}, the
|
||||
+kernel chooses the page-aligned address at which to create the mapping.
|
||||
+Otherwise, the kernel takes it as a hint about where to place the mapping.
|
||||
+The mapping at the address range specified by @var{old_address} and
|
||||
+@var{old_size} isn't unmapped.
|
||||
+
|
||||
+@code{MREMAP_DONTUNMAP} must be used together with @code{MREMAP_MAYMOVE}.
|
||||
+@var{old_size} must be the same as @var{new_size}. This flag bit is
|
||||
+Linux-specific.
|
||||
+
|
||||
+@end table
|
||||
+
|
||||
+The address of the resulting mapping is returned, or @code{MAP_FAILED}.
|
||||
+Possible error codes include:
|
||||
|
||||
@table @code
|
||||
|
||||
@@ -1804,7 +1832,7 @@ There is no existing mapping in at least part of the original region, or
|
||||
the region covers two or more distinct mappings.
|
||||
|
||||
@item EINVAL
|
||||
-The address given is misaligned or inappropriate.
|
||||
+Any arguments are inappropriate, including unknown @var{flags} values.
|
||||
|
||||
@item EAGAIN
|
||||
The region has pages locked, and if extended it would exceed the
|
||||
--
|
||||
2.33.0
|
||||
|
||||
302
0010-Add-mremap-tests.patch
Normal file
302
0010-Add-mremap-tests.patch
Normal file
@ -0,0 +1,302 @@
|
||||
From 6bb75212e6198cd14ab9d1d538a61fa9cdec31d1 Mon Sep 17 00:00:00 2001
|
||||
From: "H.J. Lu" <hjl.tools@gmail.com>
|
||||
Date: Wed, 24 Jul 2024 14:05:15 -0700
|
||||
Subject: [PATCH 10/12] Add mremap tests
|
||||
|
||||
Add tests for MREMAP_MAYMOVE and MREMAP_FIXED. On Linux, also test
|
||||
MREMAP_DONTUNMAP.
|
||||
|
||||
Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
|
||||
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
(cherry picked from commit ff0320bec2810192d453c579623482fab87bfa01)
|
||||
---
|
||||
misc/Makefile | 2 +
|
||||
misc/tst-mremap1.c | 46 +++++++++++++++
|
||||
misc/tst-mremap2.c | 54 ++++++++++++++++++
|
||||
sysdeps/generic/mremap-failure.h | 25 ++++++++
|
||||
sysdeps/unix/sysv/linux/Makefile | 1 +
|
||||
sysdeps/unix/sysv/linux/mremap-failure.h | 30 ++++++++++
|
||||
sysdeps/unix/sysv/linux/tst-linux-mremap1.c | 63 +++++++++++++++++++++
|
||||
7 files changed, 221 insertions(+)
|
||||
create mode 100644 misc/tst-mremap1.c
|
||||
create mode 100644 misc/tst-mremap2.c
|
||||
create mode 100644 sysdeps/generic/mremap-failure.h
|
||||
create mode 100644 sysdeps/unix/sysv/linux/mremap-failure.h
|
||||
create mode 100644 sysdeps/unix/sysv/linux/tst-linux-mremap1.c
|
||||
|
||||
diff --git a/misc/Makefile b/misc/Makefile
|
||||
index 90b31952c5..87778a538a 100644
|
||||
--- a/misc/Makefile
|
||||
+++ b/misc/Makefile
|
||||
@@ -251,6 +251,8 @@ tests := \
|
||||
tst-mntent-blank-passno \
|
||||
tst-mntent-escape \
|
||||
tst-mntent2 \
|
||||
+ tst-mremap1 \
|
||||
+ tst-mremap2 \
|
||||
tst-preadvwritev \
|
||||
tst-preadvwritev2 \
|
||||
tst-preadvwritev64 \
|
||||
diff --git a/misc/tst-mremap1.c b/misc/tst-mremap1.c
|
||||
new file mode 100644
|
||||
index 0000000000..0469991a6c
|
||||
--- /dev/null
|
||||
+++ b/misc/tst-mremap1.c
|
||||
@@ -0,0 +1,46 @@
|
||||
+/* Test mremap with MREMAP_MAYMOVE.
|
||||
+ Copyright (C) 2024 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <https://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <errno.h>
|
||||
+#include <sys/mman.h>
|
||||
+#include <support/xstdlib.h>
|
||||
+#include <support/xunistd.h>
|
||||
+#include <support/check.h>
|
||||
+#include <support/test-driver.h>
|
||||
+
|
||||
+static int
|
||||
+do_test (void)
|
||||
+{
|
||||
+ size_t old_size = getpagesize ();
|
||||
+ char *old_addr = xmmap (NULL, old_size, PROT_READ | PROT_WRITE,
|
||||
+ MAP_PRIVATE | MAP_ANONYMOUS, -1);
|
||||
+ old_addr[0] = 1;
|
||||
+ old_addr[old_size - 1] = 2;
|
||||
+
|
||||
+ /* Test MREMAP_MAYMOVE. */
|
||||
+ size_t new_size = old_size + old_size;
|
||||
+ char *new_addr = mremap (old_addr, old_size, new_size, MREMAP_MAYMOVE);
|
||||
+ TEST_VERIFY_EXIT (new_addr != MAP_FAILED);
|
||||
+ new_addr[0] = 1;
|
||||
+ new_addr[new_size - 1] = 2;
|
||||
+ xmunmap (new_addr, new_size);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+#include <support/test-driver.c>
|
||||
diff --git a/misc/tst-mremap2.c b/misc/tst-mremap2.c
|
||||
new file mode 100644
|
||||
index 0000000000..45be7f0369
|
||||
--- /dev/null
|
||||
+++ b/misc/tst-mremap2.c
|
||||
@@ -0,0 +1,54 @@
|
||||
+/* Test mremap with MREMAP_FIXED.
|
||||
+ Copyright (C) 2024 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <https://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <errno.h>
|
||||
+#include <sys/mman.h>
|
||||
+#include <support/xstdlib.h>
|
||||
+#include <support/xunistd.h>
|
||||
+#include <support/test-driver.h>
|
||||
+#include <mremap-failure.h>
|
||||
+
|
||||
+static int
|
||||
+do_test (void)
|
||||
+{
|
||||
+ size_t old_size = getpagesize ();
|
||||
+ size_t new_size = old_size + old_size;
|
||||
+ char *old_addr = xmmap (NULL, old_size, PROT_READ | PROT_WRITE,
|
||||
+ MAP_PRIVATE | MAP_ANONYMOUS, -1);
|
||||
+ old_addr[0] = 1;
|
||||
+ old_addr[old_size - 1] = 2;
|
||||
+
|
||||
+ char *fixed_addr = xmmap (NULL, new_size, PROT_READ | PROT_WRITE,
|
||||
+ MAP_PRIVATE | MAP_ANONYMOUS, -1);
|
||||
+ fixed_addr[0] = 1;
|
||||
+ fixed_addr[new_size - 1] = 2;
|
||||
+
|
||||
+ /* Test MREMAP_FIXED. */
|
||||
+ char *new_addr = mremap (old_addr, old_size, new_size,
|
||||
+ MREMAP_FIXED | MREMAP_MAYMOVE,
|
||||
+ fixed_addr);
|
||||
+ if (new_addr == MAP_FAILED)
|
||||
+ return mremap_failure_exit (errno);
|
||||
+ new_addr[0] = 1;
|
||||
+ new_addr[new_size - 1] = 2;
|
||||
+ xmunmap (new_addr, new_size);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+#include <support/test-driver.c>
|
||||
diff --git a/sysdeps/generic/mremap-failure.h b/sysdeps/generic/mremap-failure.h
|
||||
new file mode 100644
|
||||
index 0000000000..bc0d476368
|
||||
--- /dev/null
|
||||
+++ b/sysdeps/generic/mremap-failure.h
|
||||
@@ -0,0 +1,25 @@
|
||||
+/* mremap failure handling. Generic version.
|
||||
+ Copyright (C) 2024 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <https://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+/* Return exit value on mremap failure with errno ERR. */
|
||||
+
|
||||
+static int
|
||||
+mremap_failure_exit (int err)
|
||||
+{
|
||||
+ return EXIT_FAILURE;
|
||||
+}
|
||||
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
|
||||
index 623a7d4de0..9b503c8379 100644
|
||||
--- a/sysdeps/unix/sysv/linux/Makefile
|
||||
+++ b/sysdeps/unix/sysv/linux/Makefile
|
||||
@@ -202,6 +202,7 @@ tests += \
|
||||
tst-getauxval \
|
||||
tst-gettid \
|
||||
tst-gettid-kill \
|
||||
+ tst-linux-mremap1 \
|
||||
tst-memfd_create \
|
||||
tst-misalign-clone \
|
||||
tst-mlock2 \
|
||||
diff --git a/sysdeps/unix/sysv/linux/mremap-failure.h b/sysdeps/unix/sysv/linux/mremap-failure.h
|
||||
new file mode 100644
|
||||
index 0000000000..c99ab30ca9
|
||||
--- /dev/null
|
||||
+++ b/sysdeps/unix/sysv/linux/mremap-failure.h
|
||||
@@ -0,0 +1,30 @@
|
||||
+/* mremap failure handling. Linux version.
|
||||
+ Copyright (C) 2024 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <https://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <support/check.h>
|
||||
+
|
||||
+/* Return exit value on mremap failure with errno ERR. */
|
||||
+
|
||||
+static int
|
||||
+mremap_failure_exit (int err)
|
||||
+{
|
||||
+ if (err != EINVAL)
|
||||
+ return EXIT_FAILURE;
|
||||
+
|
||||
+ return EXIT_UNSUPPORTED;
|
||||
+}
|
||||
diff --git a/sysdeps/unix/sysv/linux/tst-linux-mremap1.c b/sysdeps/unix/sysv/linux/tst-linux-mremap1.c
|
||||
new file mode 100644
|
||||
index 0000000000..408e8af2ab
|
||||
--- /dev/null
|
||||
+++ b/sysdeps/unix/sysv/linux/tst-linux-mremap1.c
|
||||
@@ -0,0 +1,63 @@
|
||||
+/* Test mremap with MREMAP_DONTUNMAP.
|
||||
+ Copyright (C) 2024 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <https://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <errno.h>
|
||||
+#include <sys/mman.h>
|
||||
+#include <support/xstdlib.h>
|
||||
+#include <support/xunistd.h>
|
||||
+#include <support/check.h>
|
||||
+#include <support/test-driver.h>
|
||||
+#include <mremap-failure.h>
|
||||
+
|
||||
+static int
|
||||
+do_test (void)
|
||||
+{
|
||||
+ size_t old_size = getpagesize ();
|
||||
+ size_t new_size = old_size;
|
||||
+ char *old_addr = xmmap (NULL, old_size, PROT_READ | PROT_WRITE,
|
||||
+ MAP_PRIVATE | MAP_ANONYMOUS, -1);
|
||||
+ old_addr[0] = 1;
|
||||
+ old_addr[old_size - 1] = 2;
|
||||
+
|
||||
+ /* Create an available 64-page mmap region. */
|
||||
+ size_t fixed_size = old_size * 64;
|
||||
+ char *fixed_addr = xmmap (NULL, fixed_size, PROT_READ | PROT_WRITE,
|
||||
+ MAP_PRIVATE | MAP_ANONYMOUS, -1);
|
||||
+ xmunmap (fixed_addr, fixed_size);
|
||||
+
|
||||
+ /* Add 3 * pagesize. */
|
||||
+ fixed_size += 3 * old_size;
|
||||
+
|
||||
+ /* Test MREMAP_DONTUNMAP. It should return FIXED_ADDR created above. */
|
||||
+ char *new_addr = mremap (old_addr, old_size, new_size,
|
||||
+ MREMAP_DONTUNMAP | MREMAP_MAYMOVE,
|
||||
+ fixed_addr);
|
||||
+ if (new_addr == MAP_FAILED)
|
||||
+ return mremap_failure_exit (errno);
|
||||
+ TEST_VERIFY_EXIT (fixed_addr == new_addr);
|
||||
+ old_addr[0] = 3;
|
||||
+ old_addr[old_size - 1] = 4;
|
||||
+ new_addr[0] = 1;
|
||||
+ new_addr[new_size - 1] = 2;
|
||||
+ xmunmap (new_addr, new_size);
|
||||
+ xmunmap (old_addr, old_size);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+#include <support/test-driver.c>
|
||||
--
|
||||
2.33.0
|
||||
|
||||
394
0011-Update-syscall-lists-for-Linux-6.5.patch
Normal file
394
0011-Update-syscall-lists-for-Linux-6.5.patch
Normal file
@ -0,0 +1,394 @@
|
||||
From 3ac7ba61d2d4a914b64a1d793857b84f6a875fa0 Mon Sep 17 00:00:00 2001
|
||||
From: Joseph Myers <joseph@codesourcery.com>
|
||||
Date: Tue, 12 Sep 2023 14:08:53 +0000
|
||||
Subject: [PATCH 11/12] Update syscall lists for Linux 6.5
|
||||
|
||||
Linux 6.5 has one new syscall, cachestat, and also enables the
|
||||
cacheflush syscall for hppa. Update syscall-names.list and regenerate
|
||||
the arch-syscall.h headers with build-many-glibcs.py update-syscalls.
|
||||
|
||||
Tested with build-many-glibcs.py.
|
||||
|
||||
(cherry picked from commit 72511f539cc34681ec61c6a0dc2fe6d684760ffe)
|
||||
---
|
||||
sysdeps/unix/sysv/linux/aarch64/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/alpha/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/arc/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/arm/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/csky/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/hppa/arch-syscall.h | 2 ++
|
||||
sysdeps/unix/sysv/linux/i386/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/ia64/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/loongarch/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/m68k/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/microblaze/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/mips/mips32/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/mips/mips64/n32/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/mips/mips64/n64/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/nios2/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/or1k/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/powerpc/powerpc32/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/powerpc/powerpc64/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/riscv/rv32/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/riscv/rv64/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/s390/s390-32/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/s390/s390-64/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/sh/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/sparc/sparc32/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/sparc/sparc64/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/syscall-names.list | 5 +++--
|
||||
sysdeps/unix/sysv/linux/x86_64/64/arch-syscall.h | 1 +
|
||||
sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h | 1 +
|
||||
28 files changed, 31 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/sysdeps/unix/sysv/linux/aarch64/arch-syscall.h b/sysdeps/unix/sysv/linux/aarch64/arch-syscall.h
|
||||
index 4fcb6da80a..8f21ee66a0 100644
|
||||
--- a/sysdeps/unix/sysv/linux/aarch64/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/aarch64/arch-syscall.h
|
||||
@@ -7,6 +7,7 @@
|
||||
#define __NR_bind 200
|
||||
#define __NR_bpf 280
|
||||
#define __NR_brk 214
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 90
|
||||
#define __NR_capset 91
|
||||
#define __NR_chdir 49
|
||||
diff --git a/sysdeps/unix/sysv/linux/alpha/arch-syscall.h b/sysdeps/unix/sysv/linux/alpha/arch-syscall.h
|
||||
index 0cf74c1a96..c5802a5fec 100644
|
||||
--- a/sysdeps/unix/sysv/linux/alpha/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/alpha/arch-syscall.h
|
||||
@@ -11,6 +11,7 @@
|
||||
#define __NR_bind 104
|
||||
#define __NR_bpf 515
|
||||
#define __NR_brk 17
|
||||
+#define __NR_cachestat 561
|
||||
#define __NR_capget 368
|
||||
#define __NR_capset 369
|
||||
#define __NR_chdir 12
|
||||
diff --git a/sysdeps/unix/sysv/linux/arc/arch-syscall.h b/sysdeps/unix/sysv/linux/arc/arch-syscall.h
|
||||
index c1207aaa12..f23f9e1154 100644
|
||||
--- a/sysdeps/unix/sysv/linux/arc/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/arc/arch-syscall.h
|
||||
@@ -11,6 +11,7 @@
|
||||
#define __NR_bpf 280
|
||||
#define __NR_brk 214
|
||||
#define __NR_cacheflush 244
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 90
|
||||
#define __NR_capset 91
|
||||
#define __NR_chdir 49
|
||||
diff --git a/sysdeps/unix/sysv/linux/arm/arch-syscall.h b/sysdeps/unix/sysv/linux/arm/arch-syscall.h
|
||||
index e7ba04c106..7edf574899 100644
|
||||
--- a/sysdeps/unix/sysv/linux/arm/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/arm/arch-syscall.h
|
||||
@@ -15,6 +15,7 @@
|
||||
#define __NR_bpf 386
|
||||
#define __NR_brk 45
|
||||
#define __NR_cacheflush 983042
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 184
|
||||
#define __NR_capset 185
|
||||
#define __NR_chdir 12
|
||||
diff --git a/sysdeps/unix/sysv/linux/csky/arch-syscall.h b/sysdeps/unix/sysv/linux/csky/arch-syscall.h
|
||||
index dc9383758e..d74a06e063 100644
|
||||
--- a/sysdeps/unix/sysv/linux/csky/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/csky/arch-syscall.h
|
||||
@@ -8,6 +8,7 @@
|
||||
#define __NR_bpf 280
|
||||
#define __NR_brk 214
|
||||
#define __NR_cacheflush 245
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 90
|
||||
#define __NR_capset 91
|
||||
#define __NR_chdir 49
|
||||
diff --git a/sysdeps/unix/sysv/linux/hppa/arch-syscall.h b/sysdeps/unix/sysv/linux/hppa/arch-syscall.h
|
||||
index 767f1287a3..5568b94cd3 100644
|
||||
--- a/sysdeps/unix/sysv/linux/hppa/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/hppa/arch-syscall.h
|
||||
@@ -13,6 +13,8 @@
|
||||
#define __NR_bind 22
|
||||
#define __NR_bpf 341
|
||||
#define __NR_brk 45
|
||||
+#define __NR_cacheflush 356
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 106
|
||||
#define __NR_capset 107
|
||||
#define __NR_chdir 12
|
||||
diff --git a/sysdeps/unix/sysv/linux/i386/arch-syscall.h b/sysdeps/unix/sysv/linux/i386/arch-syscall.h
|
||||
index 1998f0d76a..3af21a15cb 100644
|
||||
--- a/sysdeps/unix/sysv/linux/i386/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/i386/arch-syscall.h
|
||||
@@ -15,6 +15,7 @@
|
||||
#define __NR_bpf 357
|
||||
#define __NR_break 17
|
||||
#define __NR_brk 45
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 184
|
||||
#define __NR_capset 185
|
||||
#define __NR_chdir 12
|
||||
diff --git a/sysdeps/unix/sysv/linux/ia64/arch-syscall.h b/sysdeps/unix/sysv/linux/ia64/arch-syscall.h
|
||||
index b2eab1b93d..39b270e642 100644
|
||||
--- a/sysdeps/unix/sysv/linux/ia64/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/ia64/arch-syscall.h
|
||||
@@ -11,6 +11,7 @@
|
||||
#define __NR_bind 1191
|
||||
#define __NR_bpf 1341
|
||||
#define __NR_brk 1060
|
||||
+#define __NR_cachestat 1475
|
||||
#define __NR_capget 1185
|
||||
#define __NR_capset 1186
|
||||
#define __NR_chdir 1034
|
||||
diff --git a/sysdeps/unix/sysv/linux/loongarch/arch-syscall.h b/sysdeps/unix/sysv/linux/loongarch/arch-syscall.h
|
||||
index 6bb3c8adbc..fdefe8bb6f 100644
|
||||
--- a/sysdeps/unix/sysv/linux/loongarch/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/loongarch/arch-syscall.h
|
||||
@@ -7,6 +7,7 @@
|
||||
#define __NR_bind 200
|
||||
#define __NR_bpf 280
|
||||
#define __NR_brk 214
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 90
|
||||
#define __NR_capset 91
|
||||
#define __NR_chdir 49
|
||||
diff --git a/sysdeps/unix/sysv/linux/m68k/arch-syscall.h b/sysdeps/unix/sysv/linux/m68k/arch-syscall.h
|
||||
index 5fc3723772..315e49cd33 100644
|
||||
--- a/sysdeps/unix/sysv/linux/m68k/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/m68k/arch-syscall.h
|
||||
@@ -15,6 +15,7 @@
|
||||
#define __NR_bpf 354
|
||||
#define __NR_brk 45
|
||||
#define __NR_cacheflush 123
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 184
|
||||
#define __NR_capset 185
|
||||
#define __NR_chdir 12
|
||||
diff --git a/sysdeps/unix/sysv/linux/microblaze/arch-syscall.h b/sysdeps/unix/sysv/linux/microblaze/arch-syscall.h
|
||||
index b6e9b007e4..54af12780c 100644
|
||||
--- a/sysdeps/unix/sysv/linux/microblaze/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/microblaze/arch-syscall.h
|
||||
@@ -15,6 +15,7 @@
|
||||
#define __NR_bpf 387
|
||||
#define __NR_break 17
|
||||
#define __NR_brk 45
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 184
|
||||
#define __NR_capset 185
|
||||
#define __NR_chdir 12
|
||||
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/arch-syscall.h b/sysdeps/unix/sysv/linux/mips/mips32/arch-syscall.h
|
||||
index b3a3871f8a..a2aa1ffa1b 100644
|
||||
--- a/sysdeps/unix/sysv/linux/mips/mips32/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/mips/mips32/arch-syscall.h
|
||||
@@ -17,6 +17,7 @@
|
||||
#define __NR_brk 4045
|
||||
#define __NR_cachectl 4148
|
||||
#define __NR_cacheflush 4147
|
||||
+#define __NR_cachestat 4451
|
||||
#define __NR_capget 4204
|
||||
#define __NR_capset 4205
|
||||
#define __NR_chdir 4012
|
||||
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/arch-syscall.h b/sysdeps/unix/sysv/linux/mips/mips64/n32/arch-syscall.h
|
||||
index b462182723..5bec858040 100644
|
||||
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/arch-syscall.h
|
||||
@@ -14,6 +14,7 @@
|
||||
#define __NR_brk 6012
|
||||
#define __NR_cachectl 6198
|
||||
#define __NR_cacheflush 6197
|
||||
+#define __NR_cachestat 6451
|
||||
#define __NR_capget 6123
|
||||
#define __NR_capset 6124
|
||||
#define __NR_chdir 6078
|
||||
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/arch-syscall.h b/sysdeps/unix/sysv/linux/mips/mips64/n64/arch-syscall.h
|
||||
index a9d6b94572..0166371ee2 100644
|
||||
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/arch-syscall.h
|
||||
@@ -14,6 +14,7 @@
|
||||
#define __NR_brk 5012
|
||||
#define __NR_cachectl 5198
|
||||
#define __NR_cacheflush 5197
|
||||
+#define __NR_cachestat 5451
|
||||
#define __NR_capget 5123
|
||||
#define __NR_capset 5124
|
||||
#define __NR_chdir 5078
|
||||
diff --git a/sysdeps/unix/sysv/linux/nios2/arch-syscall.h b/sysdeps/unix/sysv/linux/nios2/arch-syscall.h
|
||||
index 809a219ef3..29a4cfa988 100644
|
||||
--- a/sysdeps/unix/sysv/linux/nios2/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/nios2/arch-syscall.h
|
||||
@@ -8,6 +8,7 @@
|
||||
#define __NR_bpf 280
|
||||
#define __NR_brk 214
|
||||
#define __NR_cacheflush 244
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 90
|
||||
#define __NR_capset 91
|
||||
#define __NR_chdir 49
|
||||
diff --git a/sysdeps/unix/sysv/linux/or1k/arch-syscall.h b/sysdeps/unix/sysv/linux/or1k/arch-syscall.h
|
||||
index 1364f4cbc0..f5a3729663 100644
|
||||
--- a/sysdeps/unix/sysv/linux/or1k/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/or1k/arch-syscall.h
|
||||
@@ -7,6 +7,7 @@
|
||||
#define __NR_bind 200
|
||||
#define __NR_bpf 280
|
||||
#define __NR_brk 214
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 90
|
||||
#define __NR_capset 91
|
||||
#define __NR_chdir 49
|
||||
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/arch-syscall.h b/sysdeps/unix/sysv/linux/powerpc/powerpc32/arch-syscall.h
|
||||
index 627831ebae..3a212a0269 100644
|
||||
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/arch-syscall.h
|
||||
@@ -15,6 +15,7 @@
|
||||
#define __NR_bpf 361
|
||||
#define __NR_break 17
|
||||
#define __NR_brk 45
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 183
|
||||
#define __NR_capset 184
|
||||
#define __NR_chdir 12
|
||||
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/arch-syscall.h b/sysdeps/unix/sysv/linux/powerpc/powerpc64/arch-syscall.h
|
||||
index bae597199d..1038ead227 100644
|
||||
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/arch-syscall.h
|
||||
@@ -15,6 +15,7 @@
|
||||
#define __NR_bpf 361
|
||||
#define __NR_break 17
|
||||
#define __NR_brk 45
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 183
|
||||
#define __NR_capset 184
|
||||
#define __NR_chdir 12
|
||||
diff --git a/sysdeps/unix/sysv/linux/riscv/rv32/arch-syscall.h b/sysdeps/unix/sysv/linux/riscv/rv32/arch-syscall.h
|
||||
index 2416e041c8..57b043ffb5 100644
|
||||
--- a/sysdeps/unix/sysv/linux/riscv/rv32/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/riscv/rv32/arch-syscall.h
|
||||
@@ -6,6 +6,7 @@
|
||||
#define __NR_bind 200
|
||||
#define __NR_bpf 280
|
||||
#define __NR_brk 214
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 90
|
||||
#define __NR_capset 91
|
||||
#define __NR_chdir 49
|
||||
diff --git a/sysdeps/unix/sysv/linux/riscv/rv64/arch-syscall.h b/sysdeps/unix/sysv/linux/riscv/rv64/arch-syscall.h
|
||||
index a32bc82f60..1041a0f8c9 100644
|
||||
--- a/sysdeps/unix/sysv/linux/riscv/rv64/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/riscv/rv64/arch-syscall.h
|
||||
@@ -7,6 +7,7 @@
|
||||
#define __NR_bind 200
|
||||
#define __NR_bpf 280
|
||||
#define __NR_brk 214
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 90
|
||||
#define __NR_capset 91
|
||||
#define __NR_chdir 49
|
||||
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/arch-syscall.h b/sysdeps/unix/sysv/linux/s390/s390-32/arch-syscall.h
|
||||
index 2288f20e45..70d4c6782e 100644
|
||||
--- a/sysdeps/unix/sysv/linux/s390/s390-32/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/arch-syscall.h
|
||||
@@ -13,6 +13,7 @@
|
||||
#define __NR_bind 361
|
||||
#define __NR_bpf 351
|
||||
#define __NR_brk 45
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 184
|
||||
#define __NR_capset 185
|
||||
#define __NR_chdir 12
|
||||
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/arch-syscall.h b/sysdeps/unix/sysv/linux/s390/s390-64/arch-syscall.h
|
||||
index 05e6d8428e..65a8a9e316 100644
|
||||
--- a/sysdeps/unix/sysv/linux/s390/s390-64/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/arch-syscall.h
|
||||
@@ -11,6 +11,7 @@
|
||||
#define __NR_bind 361
|
||||
#define __NR_bpf 351
|
||||
#define __NR_brk 45
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 184
|
||||
#define __NR_capset 185
|
||||
#define __NR_chdir 12
|
||||
diff --git a/sysdeps/unix/sysv/linux/sh/arch-syscall.h b/sysdeps/unix/sysv/linux/sh/arch-syscall.h
|
||||
index d52b522d9c..94aad0f119 100644
|
||||
--- a/sysdeps/unix/sysv/linux/sh/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/sh/arch-syscall.h
|
||||
@@ -14,6 +14,7 @@
|
||||
#define __NR_bpf 375
|
||||
#define __NR_brk 45
|
||||
#define __NR_cacheflush 123
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 184
|
||||
#define __NR_capset 185
|
||||
#define __NR_chdir 12
|
||||
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/arch-syscall.h b/sysdeps/unix/sysv/linux/sparc/sparc32/arch-syscall.h
|
||||
index d3f4d8aa3e..d630306c75 100644
|
||||
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/arch-syscall.h
|
||||
@@ -14,6 +14,7 @@
|
||||
#define __NR_bind 353
|
||||
#define __NR_bpf 349
|
||||
#define __NR_brk 17
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 21
|
||||
#define __NR_capset 22
|
||||
#define __NR_chdir 12
|
||||
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/arch-syscall.h b/sysdeps/unix/sysv/linux/sparc/sparc64/arch-syscall.h
|
||||
index 2cc03d7a24..930f29b4d2 100644
|
||||
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/arch-syscall.h
|
||||
@@ -14,6 +14,7 @@
|
||||
#define __NR_bind 353
|
||||
#define __NR_bpf 349
|
||||
#define __NR_brk 17
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 21
|
||||
#define __NR_capset 22
|
||||
#define __NR_chdir 12
|
||||
diff --git a/sysdeps/unix/sysv/linux/syscall-names.list b/sysdeps/unix/sysv/linux/syscall-names.list
|
||||
index 5b69106434..cf6f70ecd9 100644
|
||||
--- a/sysdeps/unix/sysv/linux/syscall-names.list
|
||||
+++ b/sysdeps/unix/sysv/linux/syscall-names.list
|
||||
@@ -21,8 +21,8 @@
|
||||
# This file can list all potential system calls. The names are only
|
||||
# used if the installed kernel headers also provide them.
|
||||
|
||||
-# The list of system calls is current as of Linux 6.4.
|
||||
-kernel 6.4
|
||||
+# The list of system calls is current as of Linux 6.5.
|
||||
+kernel 6.5
|
||||
|
||||
FAST_atomic_update
|
||||
FAST_cmpxchg
|
||||
@@ -58,6 +58,7 @@ breakpoint
|
||||
brk
|
||||
cachectl
|
||||
cacheflush
|
||||
+cachestat
|
||||
capget
|
||||
capset
|
||||
chdir
|
||||
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/arch-syscall.h b/sysdeps/unix/sysv/linux/x86_64/64/arch-syscall.h
|
||||
index b4ab892ec1..58646cf0bd 100644
|
||||
--- a/sysdeps/unix/sysv/linux/x86_64/64/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/x86_64/64/arch-syscall.h
|
||||
@@ -12,6 +12,7 @@
|
||||
#define __NR_bind 49
|
||||
#define __NR_bpf 321
|
||||
#define __NR_brk 12
|
||||
+#define __NR_cachestat 451
|
||||
#define __NR_capget 125
|
||||
#define __NR_capset 126
|
||||
#define __NR_chdir 80
|
||||
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h b/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h
|
||||
index 772559c87b..604bcdfa5b 100644
|
||||
--- a/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h
|
||||
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/arch-syscall.h
|
||||
@@ -11,6 +11,7 @@
|
||||
#define __NR_bind 1073741873
|
||||
#define __NR_bpf 1073742145
|
||||
#define __NR_brk 1073741836
|
||||
+#define __NR_cachestat 1073742275
|
||||
#define __NR_capget 1073741949
|
||||
#define __NR_capset 1073741950
|
||||
#define __NR_chdir 1073741904
|
||||
--
|
||||
2.33.0
|
||||
|
||||
@ -0,0 +1,35 @@
|
||||
From 9184c13681b5de1f9e078538f0e1ee9b8599e1c3 Mon Sep 17 00:00:00 2001
|
||||
From: Florian Weimer <fweimer@redhat.com>
|
||||
Date: Thu, 1 Aug 2024 10:46:10 +0200
|
||||
Subject: [PATCH 12/12] resolv: Fix tst-resolv-short-response for older GCC
|
||||
(bug 32042)
|
||||
|
||||
Previous GCC versions do not support the C23 change that
|
||||
allows labels on declarations.
|
||||
|
||||
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||
(cherry picked from commit ec119972cb2598c04ec7d4219e20506006836f64)
|
||||
---
|
||||
resolv/tst-resolv-short-response.c | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/resolv/tst-resolv-short-response.c b/resolv/tst-resolv-short-response.c
|
||||
index be354ae1c7..9b06b0c176 100644
|
||||
--- a/resolv/tst-resolv-short-response.c
|
||||
+++ b/resolv/tst-resolv-short-response.c
|
||||
@@ -33,8 +33,10 @@ response (const struct resolv_response_context *ctx,
|
||||
{
|
||||
case 0:
|
||||
/* First server times out. */
|
||||
- struct resolv_response_flags flags = {.rcode = rcode};
|
||||
- resolv_response_init (b, flags);
|
||||
+ {
|
||||
+ struct resolv_response_flags flags = {.rcode = rcode};
|
||||
+ resolv_response_init (b, flags);
|
||||
+ }
|
||||
break;
|
||||
case 1:
|
||||
/* Second server sends reply. */
|
||||
--
|
||||
2.33.0
|
||||
|
||||
30
glibc.spec
30
glibc.spec
@ -67,7 +67,7 @@
|
||||
##############################################################################
|
||||
Name: glibc
|
||||
Version: 2.38
|
||||
Release: 31
|
||||
Release: 32
|
||||
Summary: The GNU libc libraries
|
||||
License: %{all_license}
|
||||
URL: http://www.gnu.org/software/glibc/
|
||||
@ -200,6 +200,18 @@ Patch110: 0026-resolv-Fix-some-unaligned-accesses-in-resolver-BZ-30.patch
|
||||
Patch111: Force-DT_RPATH-for-enable-hardcoded-path-in-tests.patch
|
||||
Patch112: i386-Disable-Intel-Xeon-Phi-tests-for-GCC-15-and-abo.patch
|
||||
Patch113: misc-Add-support-for-Linux-uio.h-RWF_NOAPPEND-flag.patch
|
||||
Patch114: 0001-s390x-Fix-segfault-in-wcsncmp-BZ-31934.patch
|
||||
Patch115: 0002-nptl-fix-potential-merge-of-__rseq_-relro-symbols.patch
|
||||
Patch116: 0003-elf-Make-dl-rseq-symbols-Linux-only.patch
|
||||
Patch117: 0004-Linux-Make-__rseq_size-useful-for-feature-detection-.patch
|
||||
Patch118: 0005-resolv-Allow-short-error-responses-to-match-any-quer.patch
|
||||
Patch119: 0006-resolv-Do-not-wait-for-non-existing-second-DNS-respo.patch
|
||||
Patch120: 0007-resolv-Track-single-request-fallback-via-_res._flags.patch
|
||||
Patch121: 0008-linux-Update-the-mremap-C-implementation-BZ-31968.patch
|
||||
Patch122: 0009-mremap-Update-manual-entry.patch
|
||||
Patch123: 0010-Add-mremap-tests.patch
|
||||
Patch124: 0011-Update-syscall-lists-for-Linux-6.5.patch
|
||||
Patch125: 0012-resolv-Fix-tst-resolv-short-response-for-older-GCC-b.patch
|
||||
|
||||
#openEuler patch list
|
||||
Patch9000: turn-default-value-of-x86_rep_stosb_threshold_form_2K_to_1M.patch
|
||||
@ -1433,8 +1445,22 @@ fi
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Fri Aug 2 2024 Qingqing Li <liqingqing3@huawei.com> - 2.38-32
|
||||
- resolv: Fix tst-resolv-short-response for older GCC (bug 32042)
|
||||
- Update syscall lists for Linux 6.5
|
||||
- Add mremap tests
|
||||
- mremap: Update manual entry
|
||||
- linux: Update the mremap C implementation [BZ #31968]
|
||||
- resolv: Track single-request fallback via _res._flags (bug 31476)
|
||||
- resolv: Do not wait for non-existing second DNS response after error (bug 30081)
|
||||
- resolv: Allow short error responses to match any query (bug 31890)
|
||||
- Linux: Make __rseq_size useful for feature detection (bug 31965)
|
||||
- elf: Make dl-rseq-symbols Linux only
|
||||
- nptl: fix potential merge of __rseq_* relro symbols
|
||||
- s390x: Fix segfault in wcsncmp [BZ #31934]
|
||||
|
||||
* Thu Jul 4 2024 lipengyu <lipengyu@kylinos.cn> - 2.38-31
|
||||
- fix bug “info command cannot index the glibc help documentation“
|
||||
- fix bug "info command cannot index the glibc help documentation"
|
||||
- add the install-info libc.info.gz step during the glibc-help installation process
|
||||
|
||||
* Wed Jun 5 Qingqing Li <liqingqing3@huawei.com> - 2.38-30
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user