glibc/string
Noah Goldstein 7da0886247 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>
2024-08-15 08:11:33 -07:00
..
bits string: Improve fortify with clang 2024-02-27 10:52:58 -03:00
_strerror.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
argz-addsep.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
argz-append.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
argz-count.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
argz-create.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
argz-ctsep.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
argz-delete.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
argz-extract.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
argz-insert.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
argz-next.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
argz-replace.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
argz-stringify.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
argz.h Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
basename.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
bcopy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
bug-envz1.c
bug-strcoll1.c
bug-strcoll2.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
bug-strncat1.c string: Fix bug-strncat1 with fortify enabled 2023-07-24 15:26:17 -03:00
bug-strpbrk1.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
bug-strspn1.c Remove "Contributed by" lines 2021-09-03 22:06:44 +05:30
bug-strtok1.c
byteswap.h Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
bzero.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
Depend
endian.h Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
envz.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
envz.h Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
explicit_bzero.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
ffs.c string: Use builtins for ffs and ffsll 2024-02-01 09:31:33 -03:00
ffsll.c string: Use builtins for ffs and ffsll 2024-02-01 09:31:33 -03:00
inl-tester.c
Makefile Enhanced test coverage for strncmp, wcsncmp 2024-08-01 09:08:32 +02:00
memccpy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
memchr.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
memcmp.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
memcmpeq.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
memcpy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
memfrob.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
memmem.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
memmove.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
memory.h Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
mempcpy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
memrchr.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
memset.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
noinl-tester.c
rawmemchr.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
sigabbrev_np.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
sigdescr_np.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
stpcpy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
stpncpy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
str-two-way.h Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
stratcliff.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strcasecmp_l.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strcasecmp.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strcasestr.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strcat.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strchr.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strchrnul.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strcmp.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strcoll_l.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strcoll.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strcpy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strcspn.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strdup.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strerror_l.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strerror.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strerrordesc_np.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strerrorname_np.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strfry.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
string-inlines.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
string.h Refer to C23 in place of C2X in glibc 2024-02-01 11:02:01 +00:00
strings.h Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strlcat.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strlcpy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strlen.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strncase_l.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strncase.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strncat.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strncmp.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strncpy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strndup.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strnlen.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strpbrk.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strrchr.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strsep.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strsignal.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strspn.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strstr.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strtok_r.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strtok.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strverscmp.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strxfrm_l.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
strxfrm.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
swab.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-bcopy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-bzero.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-endian-file-scope.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-endian-sign-conversion.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-endian-types.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-explicit_bzero.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-ffs.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-memccpy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-memchr.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-memcmp.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-memcmpeq.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-memcpy-large.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-memcpy-support.h Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-memcpy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-memmem.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-memmove.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-mempcpy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-memrchr.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-memset.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-memswap.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-rawmemchr.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-sig_np.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-stpcpy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-stpncpy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strcasecmp.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strcasestr.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strcat.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strchr.c x86: Fix bug in strchrnul-evex512 [BZ #32078] 2024-08-15 08:11:33 -07:00
test-strchrnul.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strcmp.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strcpy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strcspn.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strdup.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strerror-errno.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-string.h Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strlen.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strncasecmp.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strncat.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strncmp-nonarray.c Enhanced test coverage for strncmp, wcsncmp 2024-08-01 09:08:32 +02:00
test-strncmp.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strncpy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strndup.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strnlen-nonarray.c Enhance test coverage for strnlen, wcsnlen 2024-08-01 09:07:34 +02:00
test-strnlen.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strpbrk.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strrchr.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strspn.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
test-strstr.c wcsmbs: Ensure wcstr worst-case linear execution time (BZ 23865) 2024-04-11 14:21:32 -03:00
test-Xncmp-nonarray.c Enhanced test coverage for strncmp, wcsncmp 2024-08-01 09:08:32 +02:00
test-Xnlen-nonarray.c Enhance test coverage for strnlen, wcsnlen 2024-08-01 09:07:34 +02:00
testcopy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
tester.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
tst-bswap.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
tst-cmp.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
tst-endian.c
tst-inlcall.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
tst-memmove-overflow.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
tst-strcoll-overflow.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
tst-strerror-fail.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
tst-strerror.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
tst-strfry.c
tst-strlcat2.c Fix stringop-overflow warning in tst-strlcat2. 2024-02-05 15:04:26 +01:00
tst-strlcat.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
tst-strlcpy2.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
tst-strlcpy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
tst-strlen.c Use '%z' instead of '%Z' on printf functions 2022-09-22 08:48:04 -03:00
tst-strsignal.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
tst-strtok_r.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08: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 2024-01-01 10:53:40 -08:00
Versions Implement strlcpy and strlcat [BZ #178] 2023-06-14 18:10:08 +02:00
wordcopy.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00
xpg-strerror.c Update copyright dates with scripts/update-copyrights 2024-01-01 10:53:40 -08:00