]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Don't write beyond destination in __mempcpy_avx512_no_vzeroupper (bug 23196)
authorAndreas Schwab <schwab@suse.de>
Tue, 22 May 2018 08:37:59 +0000 (10:37 +0200)
committerAurelien Jarno <aurelien@aurel32.net>
Thu, 20 Dec 2018 07:14:01 +0000 (08:14 +0100)
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)

ChangeLog
NEWS
string/test-mempcpy.c
sysdeps/x86_64/multiarch/memmove-avx512-no-vzeroupper.S

index 699e8e510edbb73344a32a829c9b88498b1a2d75..f650db1d59a98f5f8bb0fc35c4e826daff9a4b51 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2018-05-23  Andreas Schwab  <schwab@suse.de>
+
+       [BZ #23196]
+       CVE-2018-11237
+       * sysdeps/x86_64/multiarch/memmove-avx512-no-vzeroupper.S
+       (L(preloop_large)): Save initial destination pointer in %r11 and
+       use it instead of %rax after the loop.
+       * string/test-mempcpy.c (MIN_PAGE_SIZE): Define.
+
 2018-05-09  Paul Pluzhnikov  <ppluzhnikov@google.com>
 
        [BZ #22786]
diff --git a/NEWS b/NEWS
index 0ff775e578fce315060bc69bb1327a6ebb5c190b..7e1859b78ef1fd465ce741d58085731a2d9a2541 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -65,6 +65,8 @@ The following bugs are resolved with this release:
   [22715] x86-64: Properly align La_x86_64_retval to VEC_SIZE
   [22786] libc: Stack buffer overflow in realpath() if input size is close
     to SSIZE_MAX (CVE-2018-11236)
+  [23196] string: __mempcpy_avx512_no_vzeroupper mishandles large copies
+    (CVE-2018-11237)
 \f
 Version 2.24
 
index f4969c24a5b656b7efdd2ec9d1cf7519053a73a5..d1802308a1b145148feca7cc7ebf0d83b43cfc0b 100644 (file)
@@ -18,6 +18,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #define MEMCPY_RESULT(dst, len) (dst) + (len)
+#define MIN_PAGE_SIZE 131072
 #define TEST_MAIN
 #define TEST_NAME "mempcpy"
 #include "test-string.h"
index 664b74de49133f7e60a07a72fa6133b6bc39bc90..90ac9eaff45c1e04f06a3c78a9bb598d2ddc2d6b 100644 (file)
@@ -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):