about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@suse.de>2018-05-22 10:37:59 +0200
committerAndreas Schwab <schwab@suse.de>2018-05-23 09:50:57 +0200
commit9aaaab7c6e4176e61c59b0a63c6ba906d875dc0e (patch)
tree8ce316f806948a2b6f3c29335d39e861dc91df84 /sysdeps
parent8f145c77123a565b816f918969e0e35ee5b89153 (diff)
downloadglibc-9aaaab7c6e4176e61c59b0a63c6ba906d875dc0e.tar.gz
glibc-9aaaab7c6e4176e61c59b0a63c6ba906d875dc0e.tar.xz
glibc-9aaaab7c6e4176e61c59b0a63c6ba906d875dc0e.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.
Diffstat (limited to 'sysdeps')
-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 23c0f7a9ed..effc3ac2de 100644
--- a/sysdeps/x86_64/multiarch/memmove-avx512-no-vzeroupper.S
+++ b/sysdeps/x86_64/multiarch/memmove-avx512-no-vzeroupper.S
@@ -336,6 +336,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
@@ -366,8 +367,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):