Daniel Micay 5ca66528c5 make mmap fail on requests larger than PTRDIFF_MAX
Allocations larger than PTRDIFF_MAX can be successfully created on
32-bit with a 3:1 split, or in 32-bit processes running on 64-bit.

Allowing these allocations to succeed is dangerous, as it introduces
overflows for `end - start` and isn't compatible with APIs (mis)using
ssize_t to report either the size or an error. POSIX is guilty of this,
as are many other Android APIs. LLVM even considers the `ptr + size`
case to be undefined, as all pointer arithmetic compiles down to signed
operations and overflow is treated as undefined for standard C pointer
arithmetic (GNU C `void *` arithmetic works differently).

This also prevents dlmalloc from allocating > PTRDIFF_MAX as it doesn't
merge mappings like jemalloc. A similar check will need to be added in
jemalloc's code path for huge allocations.

The musl libc implementation also performs this sanity check.

Change-Id: I5f849543f94a39719f5d27b00cef3079bb5933e9
2015-09-12 01:52:12 -04:00
..
2015-08-26 14:48:55 -07:00
2015-08-26 14:48:55 -07:00
2015-08-26 14:48:55 -07:00
2015-08-26 14:48:55 -07:00
2015-08-26 14:48:55 -07:00
2015-08-26 14:48:55 -07:00
2015-09-02 17:23:31 -07:00
2015-08-18 15:09:00 -07:00
2015-07-27 11:04:58 -07:00
2015-08-25 12:46:33 +01:00
2015-08-26 14:48:55 -07:00
2015-08-28 20:23:52 -07:00
2015-08-26 14:48:55 -07:00
2015-05-07 15:12:24 -07:00