From: Will Newton Date: Mon, 12 Aug 2013 14:08:02 +0000 (+0100) Subject: malloc: Check for integer overflow in pvalloc. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b1e934aed5170eb8948e0f3c6618c9431d6810ad;p=thirdparty%2Fglibc.git malloc: Check for integer overflow in pvalloc. A large bytes parameter to pvalloc could cause an integer overflow and corrupt allocator internals. Check the overflow does not occur before continuing with the allocation. ChangeLog: 2013-09-11 Will Newton [BZ #15855] * malloc/malloc.c (__libc_pvalloc): Check the value of bytes does not overflow. --- diff --git a/ChangeLog b/ChangeLog index 9997c1cae53..edf1a9cc27f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2013-09-11 Will Newton + + [BZ #15855] + * malloc/malloc.c (__libc_pvalloc): Check the value of bytes + does not overflow. + 2013-08-16 Florian Weimer [BZ #14699] diff --git a/malloc/malloc.c b/malloc/malloc.c index 28039b4720d..ee89a67dbc5 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -3119,6 +3119,13 @@ __libc_pvalloc(size_t bytes) size_t page_mask = GLRO(dl_pagesize) - 1; size_t rounded_bytes = (bytes + page_mask) & ~(page_mask); + /* Check for overflow. */ + if (bytes > SIZE_MAX - 2*pagesz - MINSIZE) + { + __set_errno (ENOMEM); + return 0; + } + __malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, size_t, const __malloc_ptr_t)) = force_reg (__memalign_hook);