25845f
commit 9aaaab7c6e4176e61c59b0a63c6ba906d875dc0e
25845f
Author: Andreas Schwab <schwab@suse.de>
25845f
Date:   Tue May 22 10:37:59 2018 +0200
25845f
25845f
    Don't write beyond destination in __mempcpy_avx512_no_vzeroupper (bug 23196)
25845f
    
25845f
    When compiled as mempcpy, the return value is the end of the destination
25845f
    buffer, thus it cannot be used to refer to the start of it.
25845f
25845f
Conflicts:
25845f
	sysdeps/x86_64/multiarch/memmove-avx512-no-vzeroupper.S
25845f
25845f
Change applied to sysdeps/x86_64/multiarch/memcpy-avx512-no-vzeroupper.S
25845f
instead.
25845f
25845f
diff --git a/string/test-mempcpy.c b/string/test-mempcpy.c
25845f
index 1679e9d11f282c55..7ccce13e71bd10a9 100644
25845f
--- a/string/test-mempcpy.c
25845f
+++ b/string/test-mempcpy.c
25845f
@@ -18,6 +18,7 @@
25845f
    <http://www.gnu.org/licenses/>.  */
25845f
 
25845f
 #define MEMCPY_RESULT(dst, len) (dst) + (len)
25845f
+#define MIN_PAGE_SIZE 131072
25845f
 #define TEST_MAIN
25845f
 #define TEST_NAME "mempcpy"
25845f
 #include "test-string.h"
25845f
diff --git a/sysdeps/x86_64/multiarch/memcpy-avx512-no-vzeroupper.S b/sysdeps/x86_64/multiarch/memcpy-avx512-no-vzeroupper.S
25845f
index 058e871847a77c45..b78710ea9359e129 100644
25845f
--- a/sysdeps/x86_64/multiarch/memcpy-avx512-no-vzeroupper.S
25845f
+++ b/sysdeps/x86_64/multiarch/memcpy-avx512-no-vzeroupper.S
25845f
@@ -333,6 +333,7 @@ L(preloop_large):
25845f
 	vmovups	(%rsi), %zmm4
25845f
 	vmovups	0x40(%rsi), %zmm5
25845f
 
25845f
+	mov	%rdi, %r11
25845f
 /* Align destination for access with non-temporal stores in the loop.  */
25845f
 	mov	%rdi, %r8
25845f
 	and	$-0x80, %rdi
25845f
@@ -363,8 +364,8 @@ L(gobble_256bytes_nt_loop):
25845f
 	cmp	$256, %rdx
25845f
 	ja	L(gobble_256bytes_nt_loop)
25845f
 	sfence
25845f
-	vmovups	%zmm4, (%rax)
25845f
-	vmovups	%zmm5, 0x40(%rax)
25845f
+	vmovups	%zmm4, (%r11)
25845f
+	vmovups	%zmm5, 0x40(%r11)
25845f
 	jmp	L(check)
25845f
 
25845f
 L(preloop_large_bkw):