[scudo] Check for pvalloc overflow
authorKostya Kortchinsky <kostyak@google.com>
Tue, 25 Jul 2017 21:18:02 +0000 (21:18 +0000)
committerKostya Kortchinsky <kostyak@google.com>
Tue, 25 Jul 2017 21:18:02 +0000 (21:18 +0000)
commit65fdf677f28407efea358027ecc56c7e1d0c41d8
tree3b1f3b6538fdefc3ae6256bbae409bddb3d4c6d4
parent4e0a4b3674834d68e794cbf32d5bc2481fc11d85
[scudo] Check for pvalloc overflow

Summary:
Previously we were rounding up the size passed to `pvalloc` to the next
multiple of page size no matter what. There is an overflow possibility that
wasn't accounted for. So now, return null in the event of an overflow. The man
page doesn't seem to indicate the errno to set in this particular situation,
but the glibc unit tests go for ENOMEM (https://code.woboq.org/userspace/glibc/malloc/tst-pvalloc.c.html#54)
so we'll do the same.
Update the aligned allocation funtions tests to check for properly aligned
returned pointers, and the `pvalloc` corner cases.

@alekseyshl: do you want me to do the same in the other Sanitizers?

Reviewers: alekseyshl

Reviewed By: alekseyshl

Subscribers: kubamracek, alekseyshl, llvm-commits

Differential Revision: https://reviews.llvm.org/D35818

llvm-svn: 309033
compiler-rt/lib/sanitizer_common/sanitizer_allocator_checks.h
compiler-rt/lib/scudo/scudo_allocator.cpp
compiler-rt/test/scudo/memalign.cpp
compiler-rt/test/scudo/valloc.cpp [new file with mode: 0644]