//===-- 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