aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/ExecutionEngine/SectionMemoryManager.cpp
diff options
context:
space:
mode:
authorDavid Turner <digit@google.com>2020-08-05 10:50:06 +0200
committerBenjamin Kramer <benny.kra@googlemail.com>2020-08-05 10:51:48 +0200
commitba0e71432a60e1fa2da9e098cbc574a1d9b9618b (patch)
tree6d58b13a20561d8bddec368d267c1cb334f56266 /llvm/lib/ExecutionEngine/SectionMemoryManager.cpp
parentf2916636f83dfeb4808a16045db0025783743471 (diff)
downloadllvm-ba0e71432a60e1fa2da9e098cbc574a1d9b9618b.zip
llvm-ba0e71432a60e1fa2da9e098cbc574a1d9b9618b.tar.gz
llvm-ba0e71432a60e1fa2da9e098cbc574a1d9b9618b.tar.bz2
Do not map read-only data memory sections with EXECUTE flags.
The code in SectionMemoryManager.cpp unnecessarily maps read-only data sections with the READ+EXECUTE flags. This is undesirable from a security stand-point. Moreover, on the Fuchsia platform, which is now very strict about mapping pages with the EXECUTE permission, this simply fails, because the section's pages were initially allocated with only the READ+WRITE flags. A more detailed description of the issue can be found in this public SwiftShader bug: https://issuetracker.google.com/issues/154586551 This patch just restrict the mapping to the READ flag for ROData sections. Code sections are still mapped with READ+EXECUTE as expected. Reviewed By: lhames Differential Revision: https://reviews.llvm.org/D78574
Diffstat (limited to 'llvm/lib/ExecutionEngine/SectionMemoryManager.cpp')
-rw-r--r--llvm/lib/ExecutionEngine/SectionMemoryManager.cpp3
1 files changed, 1 insertions, 2 deletions
diff --git a/llvm/lib/ExecutionEngine/SectionMemoryManager.cpp b/llvm/lib/ExecutionEngine/SectionMemoryManager.cpp
index febcabf..138b18a 100644
--- a/llvm/lib/ExecutionEngine/SectionMemoryManager.cpp
+++ b/llvm/lib/ExecutionEngine/SectionMemoryManager.cpp
@@ -161,8 +161,7 @@ bool SectionMemoryManager::finalizeMemory(std::string *ErrMsg) {
}
// Make read-only data memory read-only.
- ec = applyMemoryGroupPermissions(RODataMem,
- sys::Memory::MF_READ | sys::Memory::MF_EXEC);
+ ec = applyMemoryGroupPermissions(RODataMem, sys::Memory::MF_READ);
if (ec) {
if (ErrMsg) {
*ErrMsg = ec.message();