Skip to content

Commit

Permalink
[scudo] Enabled MTE in tests
Browse files Browse the repository at this point in the history
Reviewed By: pcc, hctim

Differential Revision: https://reviews.llvm.org/D103305
  • Loading branch information
vitalybuka committed Jun 2, 2021
1 parent 20797b1 commit 4124bca
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 1 deletion.
30 changes: 29 additions & 1 deletion compiler-rt/lib/scudo/standalone/memtag.h
Expand Up @@ -67,15 +67,27 @@ inline bool systemSupportsMemoryTagging() {
}

inline bool systemDetectsMemoryTagFaultsTestOnly() {
#ifndef PR_SET_TAGGED_ADDR_CTRL
#define PR_SET_TAGGED_ADDR_CTRL 54
#endif
#ifndef PR_GET_TAGGED_ADDR_CTRL
#define PR_GET_TAGGED_ADDR_CTRL 56
#endif
#ifndef PR_TAGGED_ADDR_ENABLE
#define PR_TAGGED_ADDR_ENABLE (1UL << 0)
#endif
#ifndef PR_MTE_TCF_SHIFT
#define PR_MTE_TCF_SHIFT 1
#endif
#ifndef PR_MTE_TAG_SHIFT
#define PR_MTE_TAG_SHIFT 3
#endif
#ifndef PR_MTE_TCF_NONE
#define PR_MTE_TCF_NONE (0UL << PR_MTE_TCF_SHIFT)
#endif
#ifndef PR_MTE_TCF_SYNC
#define PR_MTE_TCF_SYNC (1UL << PR_MTE_TCF_SHIFT)
#endif
#ifndef PR_MTE_TCF_MASK
#define PR_MTE_TCF_MASK (3UL << PR_MTE_TCF_SHIFT)
#endif
Expand All @@ -84,11 +96,23 @@ inline bool systemDetectsMemoryTagFaultsTestOnly() {
PR_MTE_TCF_MASK) != PR_MTE_TCF_NONE;
}

inline void enableSystemMemoryTaggingTestOnly() {
prctl(PR_SET_TAGGED_ADDR_CTRL,
PR_TAGGED_ADDR_ENABLE | PR_MTE_TCF_SYNC | (0xfffe << PR_MTE_TAG_SHIFT),
0, 0, 0);
}

#else // !SCUDO_LINUX

inline bool systemSupportsMemoryTagging() { return false; }

inline bool systemDetectsMemoryTagFaultsTestOnly() { return false; }
inline bool systemDetectsMemoryTagFaultsTestOnly() {
UNREACHABLE("memory tagging not supported");
}

inline void enableSystemMemoryTaggingTestOnly() {
UNREACHABLE("memory tagging not supported");
}

#endif // SCUDO_LINUX

Expand Down Expand Up @@ -250,6 +274,10 @@ inline bool systemDetectsMemoryTagFaultsTestOnly() {
UNREACHABLE("memory tagging not supported");
}

inline void enableSystemMemoryTaggingTestOnly() {
UNREACHABLE("memory tagging not supported");
}

inline void disableMemoryTagChecksTestOnly() {
UNREACHABLE("memory tagging not supported");
}
Expand Down
Expand Up @@ -6,6 +6,7 @@
//
//===----------------------------------------------------------------------===//

#include "memtag.h"
#include "tests/scudo_unit_test.h"

// Match Android's default configuration, which disables Scudo's mismatch
Expand Down Expand Up @@ -33,6 +34,8 @@ __scudo_default_options() {
// for Fuchsia builds.
#if !SCUDO_FUCHSIA
int main(int argc, char **argv) {
if (scudo::archSupportsMemoryTagging())
scudo::enableSystemMemoryTaggingTestOnly();
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Expand Down

0 comments on commit 4124bca

Please sign in to comment.