aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/x86_64/multiarch
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@suse.de>2018-05-22 10:37:59 +0200
committerAurelien Jarno <aurelien@aurel32.net>2018-12-20 08:14:01 +0100
commitb501c7b09eb941dc7ff21f9939c322d2c9c32ec0 (patch)
tree79c1d5409767cf30b8800d4df1e9fb3e89c24712 /sysdeps/x86_64/multiarch
parentff52a12250bd381aaef91edc0269f6e3e79d20ac (diff)
downloadglibc-b501c7b09eb941dc7ff21f9939c322d2c9c32ec0.tar
glibc-b501c7b09eb941dc7ff21f9939c322d2c9c32ec0.tar.gz
glibc-b501c7b09eb941dc7ff21f9939c322d2c9c32ec0.tar.bz2
glibc-b501c7b09eb941dc7ff21f9939c322d2c9c32ec0.zip
Don't write beyond destination in __mempcpy_avx512_no_vzeroupper (bug 23196)
When compiled as mempcpy, the return value is the end of the destination buffer, thus it cannot be used to refer to the start of it. (cherry picked from commit 9aaaab7c6e4176e61c59b0a63c6ba906d875dc0e)
Diffstat (limited to 'sysdeps/x86_64/multiarch')
-rw-r--r--sysdeps/x86_64/multiarch/memmove-avx512-no-vzeroupper.S5
1 files changed, 3 insertions, 2 deletions
diff --git a/sysdeps/x86_64/multiarch/memmove-avx512-no-vzeroupper.S b/sysdeps/x86_64/multiarch/memmove-avx512-no-vzeroupper.S
index 664b74de49..90ac9eaff4 100644
--- a/sysdeps/x86_64/multiarch/memmove-avx512-no-vzeroupper.S
+++ b/sysdeps/x86_64/multiarch/memmove-avx512-no-vzeroupper.S
@@ -340,6 +340,7 @@ L(preloop_large):
vmovups (%rsi), %zmm4
vmovups 0x40(%rsi), %zmm5
+ mov %rdi, %r11
/* Align destination for access with non-temporal stores in the loop. */
mov %rdi, %r8
and $-0x80, %rdi
@@ -370,8 +371,8 @@ L(gobble_256bytes_nt_loop):
cmp $256, %rdx
ja L(gobble_256bytes_nt_loop)
sfence
- vmovups %zmm4, (%rax)
- vmovups %zmm5, 0x40(%rax)
+ vmovups %zmm4, (%r11)
+ vmovups %zmm5, 0x40(%r11)
jmp L(check)
L(preloop_large_bkw):