Test that out-of-bounds UAF is not detected with MTE.
This type of error is unlikely and attempting to detect it with MTE is likely to produce false positive reports. Make sure that this type of error is not detected by the allocator. Change-Id: I90676d1a031411d6b725890311317802bc24b459
This commit is contained in:
parent
afe3212a19
commit
dc47634ec4
1 changed files with 32 additions and 0 deletions
|
|
@ -512,6 +512,38 @@ TEST_P(SizeParamCrasherTest, mte_uaf) {
|
|||
#endif
|
||||
}
|
||||
|
||||
TEST_P(SizeParamCrasherTest, mte_oob_uaf) {
|
||||
#if defined(__aarch64__)
|
||||
if (!mte_supported()) {
|
||||
GTEST_SKIP() << "Requires MTE";
|
||||
}
|
||||
|
||||
int intercept_result;
|
||||
unique_fd output_fd;
|
||||
StartProcess([&]() {
|
||||
SetTagCheckingLevelSync();
|
||||
volatile int* p = (volatile int*)malloc(GetParam());
|
||||
free((void *)p);
|
||||
p[-1] = 42;
|
||||
});
|
||||
|
||||
StartIntercept(&output_fd);
|
||||
FinishCrasher();
|
||||
AssertDeath(SIGSEGV);
|
||||
FinishIntercept(&intercept_result);
|
||||
|
||||
ASSERT_EQ(1, intercept_result) << "tombstoned reported failure";
|
||||
|
||||
std::string result;
|
||||
ConsumeFd(std::move(output_fd), &result);
|
||||
|
||||
ASSERT_MATCH(result, R"(signal 11 \(SIGSEGV\))");
|
||||
ASSERT_NOT_MATCH(result, R"(Cause: \[MTE\]: Use After Free, 4 bytes left)");
|
||||
#else
|
||||
GTEST_SKIP() << "Requires aarch64";
|
||||
#endif
|
||||
}
|
||||
|
||||
TEST_P(SizeParamCrasherTest, mte_overflow) {
|
||||
#if defined(__aarch64__)
|
||||
if (!mte_supported()) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue