| //===-- scudo_errors.cpp ----------------------------------------*- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| /// |
| /// Verbose termination functions. |
| /// |
| //===----------------------------------------------------------------------===// |
| |
| #include "scudo_utils.h" |
| |
| #include "sanitizer_common/sanitizer_flags.h" |
| |
| namespace __scudo { |
| |
| void NORETURN reportCallocOverflow(uptr Count, uptr Size) { |
| dieWithMessage("calloc parameters overflow: count * size (%zd * %zd) cannot " |
| "be represented with type size_t\n", Count, Size); |
| } |
| |
| void NORETURN reportPvallocOverflow(uptr Size) { |
| dieWithMessage("pvalloc parameters overflow: size 0x%zx rounded up to system " |
| "page size 0x%zx cannot be represented in type size_t\n", Size, |
| GetPageSizeCached()); |
| } |
| |
| void NORETURN reportAllocationAlignmentTooBig(uptr Alignment, |
| uptr MaxAlignment) { |
| dieWithMessage("invalid allocation alignment: %zd exceeds maximum supported " |
| "allocation of %zd\n", Alignment, MaxAlignment); |
| } |
| |
| void NORETURN reportAllocationAlignmentNotPowerOfTwo(uptr Alignment) { |
| dieWithMessage("invalid allocation alignment: %zd, alignment must be a power " |
| "of two\n", Alignment); |
| } |
| |
| void NORETURN reportInvalidPosixMemalignAlignment(uptr Alignment) { |
| dieWithMessage( |
| "invalid alignment requested in posix_memalign: %zd, alignment" |
| " must be a power of two and a multiple of sizeof(void *) == %zd\n", |
| Alignment, sizeof(void *)); |
| } |
| |
| void NORETURN reportInvalidAlignedAllocAlignment(uptr Size, uptr Alignment) { |
| #if SANITIZER_POSIX |
| dieWithMessage("invalid alignment requested in aligned_alloc: %zd, alignment " |
| "must be a power of two and the requested size 0x%zx must be a multiple " |
| "of alignment\n", Alignment, Size); |
| #else |
| dieWithMessage("invalid alignment requested in aligned_alloc: %zd, the " |
| "requested size 0x%zx must be a multiple of alignment\n", Alignment, |
| Size); |
| #endif |
| } |
| |
| void NORETURN reportAllocationSizeTooBig(uptr UserSize, uptr TotalSize, |
| uptr MaxSize) { |
| dieWithMessage("requested allocation size 0x%zx (0x%zx after adjustments) " |
| "exceeds maximum supported size of 0x%zx\n", UserSize, TotalSize, |
| MaxSize); |
| } |
| |
| void NORETURN reportRssLimitExceeded() { |
| dieWithMessage("specified RSS limit exceeded, currently set to " |
| "soft_rss_limit_mb=%zd\n", common_flags()->soft_rss_limit_mb); |
| } |
| |
| void NORETURN reportOutOfMemory(uptr RequestedSize) { |
| dieWithMessage("allocator is out of memory trying to allocate 0x%zx bytes\n", |
| RequestedSize); |
| } |
| |
| } // namespace __scudo |