1*76559068SAndroid Build Coastguard Worker //===-- report_test.cpp -----------------------------------------*- C++ -*-===//
2*76559068SAndroid Build Coastguard Worker //
3*76559068SAndroid Build Coastguard Worker // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*76559068SAndroid Build Coastguard Worker // See https://llvm.org/LICENSE.txt for license information.
5*76559068SAndroid Build Coastguard Worker // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*76559068SAndroid Build Coastguard Worker //
7*76559068SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
8*76559068SAndroid Build Coastguard Worker
9*76559068SAndroid Build Coastguard Worker #include "tests/scudo_unit_test.h"
10*76559068SAndroid Build Coastguard Worker
11*76559068SAndroid Build Coastguard Worker #include "report.h"
12*76559068SAndroid Build Coastguard Worker
TEST(ScudoReportDeathTest,Check)13*76559068SAndroid Build Coastguard Worker TEST(ScudoReportDeathTest, Check) {
14*76559068SAndroid Build Coastguard Worker CHECK_LT(-1, 1);
15*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(CHECK_GT(-1, 1),
16*76559068SAndroid Build Coastguard Worker "\\(-1\\) > \\(1\\) \\(\\(u64\\)op1=18446744073709551615, "
17*76559068SAndroid Build Coastguard Worker "\\(u64\\)op2=1");
18*76559068SAndroid Build Coastguard Worker }
19*76559068SAndroid Build Coastguard Worker
TEST(ScudoReportDeathTest,Generic)20*76559068SAndroid Build Coastguard Worker TEST(ScudoReportDeathTest, Generic) {
21*76559068SAndroid Build Coastguard Worker // Potentially unused if EXPECT_DEATH isn't defined.
22*76559068SAndroid Build Coastguard Worker UNUSED void *P = reinterpret_cast<void *>(0x42424242U);
23*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(scudo::reportError("TEST123"), "Scudo ERROR.*TEST123");
24*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(scudo::reportInvalidFlag("ABC", "DEF"), "Scudo ERROR.*ABC.*DEF");
25*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(scudo::reportHeaderCorruption(P), "Scudo ERROR.*42424242");
26*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(scudo::reportSanityCheckError("XYZ"), "Scudo ERROR.*XYZ");
27*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(scudo::reportAlignmentTooBig(123, 456), "Scudo ERROR.*123.*456");
28*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(scudo::reportAllocationSizeTooBig(123, 456, 789),
29*76559068SAndroid Build Coastguard Worker "Scudo ERROR.*123.*456.*789");
30*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(scudo::reportOutOfMemory(4242), "Scudo ERROR.*4242");
31*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(
32*76559068SAndroid Build Coastguard Worker scudo::reportInvalidChunkState(scudo::AllocatorAction::Recycling, P),
33*76559068SAndroid Build Coastguard Worker "Scudo ERROR.*recycling.*42424242");
34*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(
35*76559068SAndroid Build Coastguard Worker scudo::reportInvalidChunkState(scudo::AllocatorAction::Sizing, P),
36*76559068SAndroid Build Coastguard Worker "Scudo ERROR.*sizing.*42424242");
37*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(
38*76559068SAndroid Build Coastguard Worker scudo::reportMisalignedPointer(scudo::AllocatorAction::Deallocating, P),
39*76559068SAndroid Build Coastguard Worker "Scudo ERROR.*deallocating.*42424242");
40*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(scudo::reportDeallocTypeMismatch(
41*76559068SAndroid Build Coastguard Worker scudo::AllocatorAction::Reallocating, P, 0, 1),
42*76559068SAndroid Build Coastguard Worker "Scudo ERROR.*reallocating.*42424242");
43*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(scudo::reportDeleteSizeMismatch(P, 123, 456),
44*76559068SAndroid Build Coastguard Worker "Scudo ERROR.*42424242.*123.*456");
45*76559068SAndroid Build Coastguard Worker }
46*76559068SAndroid Build Coastguard Worker
TEST(ScudoReportDeathTest,CSpecific)47*76559068SAndroid Build Coastguard Worker TEST(ScudoReportDeathTest, CSpecific) {
48*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(scudo::reportAlignmentNotPowerOfTwo(123), "Scudo ERROR.*123");
49*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(scudo::reportCallocOverflow(123, 456), "Scudo ERROR.*123.*456");
50*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(scudo::reportInvalidPosixMemalignAlignment(789),
51*76559068SAndroid Build Coastguard Worker "Scudo ERROR.*789");
52*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(scudo::reportPvallocOverflow(123), "Scudo ERROR.*123");
53*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(scudo::reportInvalidAlignedAllocAlignment(123, 456),
54*76559068SAndroid Build Coastguard Worker "Scudo ERROR.*123.*456");
55*76559068SAndroid Build Coastguard Worker }
56*76559068SAndroid Build Coastguard Worker
57*76559068SAndroid Build Coastguard Worker #if SCUDO_LINUX || SCUDO_TRUSTY || SCUDO_ANDROID
58*76559068SAndroid Build Coastguard Worker #include "report_linux.h"
59*76559068SAndroid Build Coastguard Worker
60*76559068SAndroid Build Coastguard Worker #include <errno.h>
61*76559068SAndroid Build Coastguard Worker #include <sys/mman.h>
62*76559068SAndroid Build Coastguard Worker
TEST(ScudoReportDeathTest,Linux)63*76559068SAndroid Build Coastguard Worker TEST(ScudoReportDeathTest, Linux) {
64*76559068SAndroid Build Coastguard Worker errno = ENOMEM;
65*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(scudo::reportMapError(),
66*76559068SAndroid Build Coastguard Worker "Scudo ERROR:.*internal map failure \\(error desc=.*\\)");
67*76559068SAndroid Build Coastguard Worker errno = ENOMEM;
68*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(scudo::reportMapError(1024U),
69*76559068SAndroid Build Coastguard Worker "Scudo ERROR:.*internal map failure \\(error desc=.*\\) "
70*76559068SAndroid Build Coastguard Worker "requesting 1KB");
71*76559068SAndroid Build Coastguard Worker errno = ENOMEM;
72*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(scudo::reportUnmapError(0x1000U, 100U),
73*76559068SAndroid Build Coastguard Worker "Scudo ERROR:.*internal unmap failure \\(error desc=.*\\) Addr "
74*76559068SAndroid Build Coastguard Worker "0x1000 Size 100");
75*76559068SAndroid Build Coastguard Worker errno = ENOMEM;
76*76559068SAndroid Build Coastguard Worker EXPECT_DEATH(scudo::reportProtectError(0x1000U, 100U, PROT_READ),
77*76559068SAndroid Build Coastguard Worker "Scudo ERROR:.*internal protect failure \\(error desc=.*\\) "
78*76559068SAndroid Build Coastguard Worker "Addr 0x1000 Size 100 Prot 1");
79*76559068SAndroid Build Coastguard Worker }
80*76559068SAndroid Build Coastguard Worker #endif
81