15f757f3fSDimitry Andric //===-- report_linux.cpp ----------------------------------------*- C++ -*-===// 25f757f3fSDimitry Andric // 35f757f3fSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 45f757f3fSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 55f757f3fSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65f757f3fSDimitry Andric // 75f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 85f757f3fSDimitry Andric 95f757f3fSDimitry Andric #include "platform.h" 105f757f3fSDimitry Andric 115f757f3fSDimitry Andric #if SCUDO_LINUX || SCUDO_TRUSTY 125f757f3fSDimitry Andric 135f757f3fSDimitry Andric #include "common.h" 145f757f3fSDimitry Andric #include "internal_defs.h" 155f757f3fSDimitry Andric #include "report.h" 165f757f3fSDimitry Andric #include "report_linux.h" 175f757f3fSDimitry Andric #include "string_utils.h" 185f757f3fSDimitry Andric 195f757f3fSDimitry Andric #include <errno.h> 205f757f3fSDimitry Andric #include <stdlib.h> 215f757f3fSDimitry Andric #include <string.h> 225f757f3fSDimitry Andric 235f757f3fSDimitry Andric namespace scudo { 245f757f3fSDimitry Andric 255f757f3fSDimitry Andric // Fatal internal map() error (potentially OOM related). 265f757f3fSDimitry Andric void NORETURN reportMapError(uptr SizeIfOOM) { 27*0fca6ea1SDimitry Andric ScopedString Error; 28*0fca6ea1SDimitry Andric Error.append("Scudo ERROR: internal map failure (error desc=%s)", 29*0fca6ea1SDimitry Andric strerror(errno)); 30*0fca6ea1SDimitry Andric if (SizeIfOOM) 31*0fca6ea1SDimitry Andric Error.append(" requesting %zuKB", SizeIfOOM >> 10); 32*0fca6ea1SDimitry Andric Error.append("\n"); 33*0fca6ea1SDimitry Andric reportRawError(Error.data()); 345f757f3fSDimitry Andric } 355f757f3fSDimitry Andric 365f757f3fSDimitry Andric void NORETURN reportUnmapError(uptr Addr, uptr Size) { 37*0fca6ea1SDimitry Andric ScopedString Error; 38*0fca6ea1SDimitry Andric Error.append("Scudo ERROR: internal unmap failure (error desc=%s) Addr 0x%zx " 395f757f3fSDimitry Andric "Size %zu\n", 405f757f3fSDimitry Andric strerror(errno), Addr, Size); 41*0fca6ea1SDimitry Andric reportRawError(Error.data()); 425f757f3fSDimitry Andric } 435f757f3fSDimitry Andric 445f757f3fSDimitry Andric void NORETURN reportProtectError(uptr Addr, uptr Size, int Prot) { 45*0fca6ea1SDimitry Andric ScopedString Error; 46*0fca6ea1SDimitry Andric Error.append( 475f757f3fSDimitry Andric "Scudo ERROR: internal protect failure (error desc=%s) Addr 0x%zx " 485f757f3fSDimitry Andric "Size %zu Prot %x\n", 495f757f3fSDimitry Andric strerror(errno), Addr, Size, Prot); 50*0fca6ea1SDimitry Andric reportRawError(Error.data()); 515f757f3fSDimitry Andric } 525f757f3fSDimitry Andric 535f757f3fSDimitry Andric } // namespace scudo 545f757f3fSDimitry Andric 555f757f3fSDimitry Andric #endif // SCUDO_LINUX || SCUDO_TRUSTY 56