[compiler-rt] 993555b - [compiler-rt][scudo] Check for failing prctl call
Leonard Chan via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 4 13:14:39 PDT 2021
Author: Leonard Chan
Date: 2021-10-04T13:14:20-07:00
New Revision: 993555beb8ff33aa35773af01cb3821ae45e6e39
URL: https://github.com/llvm/llvm-project/commit/993555beb8ff33aa35773af01cb3821ae45e6e39
DIFF: https://github.com/llvm/llvm-project/commit/993555beb8ff33aa35773af01cb3821ae45e6e39.diff
LOG: [compiler-rt][scudo] Check for failing prctl call
A bunch of MTE tests like ./ScudoUnitTest-aarch64-Test/MemtagTest.StoreTags
can fail on aarch64-linux if the kernel doesn't support the tagged address ABI. It looks like
the call to prctl(PR_GET_TAGGED_ADDR_CTRL, 0, 0, 0, 0) can return -1, which
casted to an unsigned int and masked will return a value not equal to
PR_MTE_TCF_NONE, meaning systemDetectsMemoryTagFaultsTestOnly can return an incorrect value.
This updates the check to account for a failing prctl call.
Differential Revision: https://reviews.llvm.org/D110888
Added:
Modified:
compiler-rt/lib/scudo/standalone/memtag.h
Removed:
################################################################################
diff --git a/compiler-rt/lib/scudo/standalone/memtag.h b/compiler-rt/lib/scudo/standalone/memtag.h
index c48e228fbe44f..8097b77ebd416 100644
--- a/compiler-rt/lib/scudo/standalone/memtag.h
+++ b/compiler-rt/lib/scudo/standalone/memtag.h
@@ -91,9 +91,10 @@ inline bool systemDetectsMemoryTagFaultsTestOnly() {
#ifndef PR_MTE_TCF_MASK
#define PR_MTE_TCF_MASK (3UL << PR_MTE_TCF_SHIFT)
#endif
- return (static_cast<unsigned long>(
- prctl(PR_GET_TAGGED_ADDR_CTRL, 0, 0, 0, 0)) &
- PR_MTE_TCF_MASK) != PR_MTE_TCF_NONE;
+ int res = prctl(PR_GET_TAGGED_ADDR_CTRL, 0, 0, 0, 0);
+ if (res == -1)
+ return false;
+ return (static_cast<unsigned long>(res) & PR_MTE_TCF_MASK) != PR_MTE_TCF_NONE;
}
inline void enableSystemMemoryTaggingTestOnly() {
More information about the llvm-commits
mailing list