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