2118accf25
Resolves: RHEL-45522
Fedora 40 commit: 9404e14f4d
Upstream commit: 4bdcc1963bc2b5ba5f8e319e402d9eb2cb6096c1
Fedora 40 changes:
- Backport /etc/resolv.conf enhancements to thelp with RHEL-18039 testing
Related: RHEL-50663
- Support --without testsuite builds without perl installed (#2292195)
- Use release instead of baserelease for glibc32 conflict
- Add Conflicts:/Obsoletes: for glibc32 to glibc.i686
- ppc64le: Build early startup code with -mcpu=power8
Resolves: RHEL-43456
- Move ANSI_X3.110-1983 support from main package to glibc-gconv-extra.
Resolves: RHEL-41206
Upstream changes:
- manual: make setrlimit() description less ambiguous
- manual/stdio: Clarify putc and putwc
- malloc: add multi-threaded tests for aligned_alloc/calloc/malloc
- malloc: avoid global locks in tst-aligned_alloc-lib.c
- 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)
Resolves: RHEL-50663
- elf: Fix localplt.awk for DT_RELR-enabled builds (BZ 31978)
- Fix usage of _STACK_GROWS_DOWN and _STACK_GROWS_UP defines [BZ 31989]
- 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]
Resolves: RHEL-49488
- stdlib: fix arc4random fallback to /dev/urandom (BZ 31612)
- math: Provide missing math symbols on libc.a (BZ 31781)
- math: Fix isnanf128 static build (BZ 31774)
- math: Fix i386 and m68k exp10 on static build (BZ 31775)
- math: Fix i386 and m68k fmod/fmodf on static build (BZ 31488)
- posix: Fix pidfd_spawn/pidfd_spawnp leak if execve fails (BZ 31695)
54 lines
2.1 KiB
Diff
54 lines
2.1 KiB
Diff
commit 5c46e6b66636be0010e9a732d5ba1e65ebd54687
|
|
Author: Stefan Liebler <stli@linux.ibm.com>
|
|
Date: Thu Jul 11 11:28:53 2024 +0200
|
|
|
|
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)
|
|
|
|
diff --git a/sysdeps/s390/wcsncmp-vx.S b/sysdeps/s390/wcsncmp-vx.S
|
|
index bf6dfa6bc2b904b5..8b081567a2a5732c 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
|