glibc/string
Noah Goldstein c005d1bd6f x86: Fix bug in strchrnul-evex512 [BZ #32078]
Issue was we were expecting not matches with CHAR before the start of
the string in the page cross case.

The check code in the page cross case:
```
    and    $0xffffffffffffffc0,%rax
    vmovdqa64 (%rax),%zmm17
    vpcmpneqb %zmm17,%zmm16,%k1
    vptestmb %zmm17,%zmm17,%k0{%k1}
    kmovq  %k0,%rax
    inc    %rax
    shr    %cl,%rax
    je     L(continue)
```

expects that all characters that neither match null nor CHAR will be
1s in `rax` prior to the `inc`. Then the `inc` will overflow all of
the 1s where no relevant match was found.

This is incorrect in the page-cross case, as the
`vmovdqa64 (%rax),%zmm17` loads from before the start of the input
string.

If there are matches with CHAR before the start of the string, `rax`
won't properly overflow.

The fix is quite simple. Just replace:

```
    inc    %rax
    shr    %cl,%rax
```
With:
```
    sar    %cl,%rax
    inc    %rax
```

The arithmetic shift will clear any matches prior to the start of the
string while maintaining the signbit so the 1s can properly overflow
to zero in the case of no matches.
Reviewed-by: H.J. Lu <hjl.tools@gmail.com>

(cherry picked from commit 7da0886247)
2024-08-15 14:41:17 -07:00
..
bits Implement strlcpy and strlcat [BZ #178] 2023-06-14 18:10:08 +02:00
_strerror.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
argz-addsep.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
argz-append.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
argz-count.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
argz-create.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
argz-ctsep.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
argz-delete.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
argz-extract.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
argz-insert.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
argz-next.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
argz-replace.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
argz-stringify.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
argz.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
basename.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
bcopy.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
bug-envz1.c
bug-strcoll1.c
bug-strcoll2.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
bug-strncat1.c string: Fix bug-strncat1 with fortify enabled 2023-07-24 15:26:17 -03:00
bug-strpbrk1.c
bug-strspn1.c
bug-strtok1.c
byteswap.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
bzero.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
Depend
endian.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
envz.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
envz.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
explicit_bzero.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
ffs.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
ffsll.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
inl-tester.c
Makefile Exclude routines from fortification 2023-07-05 16:59:48 +02:00
memccpy.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
memchr.c string: Improve generic memchr 2023-02-06 16:19:35 -03:00
memcmp.c Parameterize OP_T_THRES from memcopy.h 2023-02-06 16:19:35 -03:00
memcmpeq.c Fix all the remaining misspellings -- BZ 25337 2023-06-02 01:39:48 +00:00
memcpy.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
memfrob.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
memmem.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
memmove.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
memory.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
mempcpy.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
memrchr.c string: Add libc_hidden_proto for memrchr 2023-02-08 17:13:58 -03:00
memset.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
noinl-tester.c
rawmemchr.c Replace rawmemchr (s, '\0') with strchr 2023-02-06 16:16:19 +00:00
sigabbrev_np.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
sigdescr_np.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
stpcpy.c string: Improve generic stpcpy 2023-02-06 16:19:35 -03:00
stpncpy.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
str-two-way.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
stratcliff.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strcasecmp_l.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strcasecmp.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strcasestr.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strcat.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strchr.c string: Improve generic strchr 2023-02-06 16:19:35 -03:00
strchrnul.c string: Add libc_hidden_proto for strchrnul 2023-02-08 17:13:56 -03:00
strcmp.c string: Improve generic strcmp 2023-02-06 16:19:35 -03:00
strcoll_l.c Fix all the remaining misspellings -- BZ 25337 2023-06-02 01:39:48 +00:00
strcoll.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strcpy.c string: Improve generic strcpy 2023-02-06 16:19:35 -03:00
strcspn.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strdup.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strerror_l.c string: strerror must not return NULL (bug 30555) 2023-06-15 19:54:09 +02:00
strerror.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strerrordesc_np.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strerrorname_np.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strfry.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
string-inlines.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
string.h Implement strlcpy and strlcat [BZ #178] 2023-06-14 18:10:08 +02:00
strings.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strlcat.c Implement strlcpy and strlcat [BZ #178] 2023-06-14 18:10:08 +02:00
strlcpy.c Implement strlcpy and strlcat [BZ #178] 2023-06-14 18:10:08 +02:00
strlen.c string: Improve generic strlen 2023-02-06 16:19:35 -03:00
strncase_l.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strncase.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strncat.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strncmp.c string: Improve generic strncmp 2023-02-06 16:19:35 -03:00
strncpy.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strndup.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strnlen.c string: Improve generic strnlen with memchr 2023-02-06 16:19:35 -03:00
strpbrk.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strrchr.c string: Improve generic strrchr with memrchr and strlen 2023-02-06 16:19:35 -03:00
strsep.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strsignal.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strspn.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strstr.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strtok_r.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strtok.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strverscmp.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strxfrm_l.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
strxfrm.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
swab.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-bcopy.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-bzero.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-endian-file-scope.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-endian-sign-conversion.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-endian-types.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-explicit_bzero.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-ffs.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-memccpy.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-memchr.c string: Hook up the default implementation on test-memchr 2023-02-06 16:19:35 -03:00
test-memcmp.c Fix all the remaining misspellings -- BZ 25337 2023-06-02 01:39:48 +00:00
test-memcmpeq.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-memcpy-large.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-memcpy-support.h Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-memcpy.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-memmem.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-memmove.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-mempcpy.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-memrchr.c string: Hook up the default implementation on test-memrchr 2023-02-06 16:19:35 -03:00
test-memset.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-rawmemchr.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-sig_np.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-stpcpy.c string: Hook up the default implementation on test-stpcpy 2023-02-06 16:19:35 -03:00
test-stpncpy.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-strcasecmp.c Fix all the remaining misspellings -- BZ 25337 2023-06-02 01:39:48 +00:00
test-strcasestr.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-strcat.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-strchr.c x86: Fix bug in strchrnul-evex512 [BZ #32078] 2024-08-15 14:41:17 -07:00
test-strchrnul.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-strcmp.c Fix all the remaining misspellings -- BZ 25337 2023-06-02 01:39:48 +00:00
test-strcpy.c string: Hook up the default implementation on test-strcpy 2023-02-06 16:19:35 -03:00
test-strcspn.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-strdup.c string: Add tests for strdup (BZ #30266) 2023-04-21 10:28:01 -03:00
test-strerror-errno.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-string.h string: Allow use of test-string.h for non-ifunc implementations. 2023-04-21 10:28:01 -03:00
test-strlen.c string: Hook up the default implementation on test-strlen 2023-02-06 16:19:35 -03:00
test-strncasecmp.c Fix all the remaining misspellings -- BZ 25337 2023-06-02 01:39:48 +00:00
test-strncat.c Fix stringop-overflow warning in test-strncat. 2023-03-02 14:25:34 +01:00
test-strncmp.c Fix all the remaining misspellings -- BZ 25337 2023-06-02 01:39:48 +00:00
test-strncpy.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-strndup.c string: Add tests for strndup (BZ #30266) 2023-04-21 10:50:42 -03:00
test-strnlen.c Fix all the remaining misspellings -- BZ 25337 2023-06-02 01:39:48 +00:00
test-strpbrk.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-strrchr.c string: Hook up the default implementation on test-strrchr 2023-02-06 16:19:35 -03:00
test-strspn.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
test-strstr.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
testcopy.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tester.c string: Fix tester build with fortify enable with gcc < 12 2023-09-15 23:56:26 +02:00
tst-bswap.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-cmp.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-endian.c
tst-inlcall.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-memmove-overflow.c Fix all the remaining misspellings -- BZ 25337 2023-06-02 01:39:48 +00:00
tst-strcoll-overflow.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-strerror-fail.c string: strerror must not return NULL (bug 30555) 2023-06-15 19:54:09 +02:00
tst-strerror.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-strfry.c
tst-strlcat.c Implement strlcpy and strlcat [BZ #178] 2023-06-14 18:10:08 +02:00
tst-strlcpy.c Implement strlcpy and strlcat [BZ #178] 2023-06-14 18:10:08 +02:00
tst-strlen.c
tst-strsignal.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-strtok_r.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
tst-strtok.c
tst-strxfrm2.c
tst-strxfrm.c
tst-svc2.c
tst-svc.c
tst-svc.expect
tst-svc.input
tst-xbzero-opt.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00
Versions Implement strlcpy and strlcat [BZ #178] 2023-06-14 18:10:08 +02:00
wordcopy.c string: Suppress -Wmaybe-unitialized for wordcopy [BZ #19444] 2023-01-12 09:06:00 -03:00
xpg-strerror.c Update copyright dates with scripts/update-copyrights 2023-01-06 21:14:39 +00:00