]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix integer overflow in malloc when tcache is enabled [BZ #22375]
authorArjun Shankar <arjun@redhat.com>
Thu, 30 Nov 2017 12:31:45 +0000 (13:31 +0100)
committerFlorian Weimer <fweimer@redhat.com>
Wed, 6 Dec 2017 06:44:51 +0000 (07:44 +0100)
When the per-thread cache is enabled, __libc_malloc uses request2size (which
does not perform an overflow check) to calculate the chunk size from the
requested allocation size. This leads to an integer overflow causing malloc
to incorrectly return the last successfully allocated block when called with
a very large size argument (close to SIZE_MAX).

This commit uses checked_request2size instead, removing the overflow.

(cherry picked from commit 34697694e8a93b325b18f25f7dcded55d6baeaf6)

ChangeLog
NEWS
malloc/malloc.c

index fab886ab010c39b86bd8141be79e9c6266cee255..29bd704bda785e67c389ffed570be441fa3d651b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2017-11-30  Arjun Shankar  <arjun@redhat.com>
+
+       [BZ #22375]
+       CVE-2017-17426
+       * malloc/malloc.c (__libc_malloc): Use checked_request2size
+       instead of request2size.
+
 2017-11-02  Florian Weimer  <fweimer@redhat.com>
 
        [BZ #22332]
diff --git a/NEWS b/NEWS
index 61bffe0451da72746b2055f1ef97f67b6a2dcc2e..895e2bcbf317921e646107d26d4839741c7d7eb0 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -39,6 +39,11 @@ Security related changes:
   without GLOB_NOESCAPE, could write past the end of a buffer while
   unescaping user names.  Reported by Tim Rühsen.
 
+  CVE-2017-17426: The malloc function, when called with an object size near
+  the value SIZE_MAX, would return a pointer to a buffer which is too small,
+  instead of NULL.  This was a regression introduced with the new malloc
+  thread cache in glibc 2.26.  Reported by Iain Buclaw.
+
 The following bugs are resolved with this release:
 
   [16750] ldd: Never run file directly.
@@ -72,6 +77,7 @@ The following bugs are resolved with this release:
   [22321] sysconf: Fix missing definition of UIO_MAXIOV on Linux
   [22322] libc: [mips64] wrong bits/long-double.h installed
   [22325] glibc: Memory leak in glob with GLOB_TILDE (CVE-2017-15671)
+  [22375] malloc returns pointer from tcache instead of NULL (CVE-2017-17426)
 \f
 Version 2.26
 
index 7783d05651ff631eb8397f9f7dba058bd1c34a26..6a52c288de5e23fbf9bf369d20d2d36a665c794c 100644 (file)
@@ -3029,7 +3029,8 @@ __libc_malloc (size_t bytes)
     return (*hook)(bytes, RETURN_ADDRESS (0));
 #if USE_TCACHE
   /* int_free also calls request2size, be careful to not pad twice.  */
-  size_t tbytes = request2size (bytes);
+  size_t tbytes;
+  checked_request2size (bytes, tbytes);
   size_t tc_idx = csize2tidx (tbytes);
 
   MAYBE_INIT_TCACHE ();