summaryrefslogtreecommitdiffstats
path: root/drivers/unix
diff options
context:
space:
mode:
authorDavid Snopek <dsnopek@gmail.com>2023-10-30 16:14:59 -0500
committerDavid Snopek <dsnopek@gmail.com>2023-10-30 16:16:08 -0500
commita039d0b61ae2e34baf7ea57d572c23125094b965 (patch)
treece8d86e2729bb6e1356bb6908001140b49a91e80 /drivers/unix
parentdcbee437f7f238801e0c1a19a12a8d0e0aec63b4 (diff)
downloadredot-engine-a039d0b61ae2e34baf7ea57d572c23125094b965.tar.gz
Linux: Disable RTLD_DEEPBIND mode for dlopen() in sanitizer builds
Diffstat (limited to 'drivers/unix')
-rw-r--r--drivers/unix/os_unix.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/unix/os_unix.cpp b/drivers/unix/os_unix.cpp
index 581daaca05..9a77930d75 100644
--- a/drivers/unix/os_unix.cpp
+++ b/drivers/unix/os_unix.cpp
@@ -85,6 +85,12 @@
#define RTLD_DEEPBIND 0
#endif
+#ifndef SANITIZERS_ENABLED
+#define GODOT_DLOPEN_MODE RTLD_NOW | RTLD_DEEPBIND
+#else
+#define GODOT_DLOPEN_MODE RTLD_NOW
+#endif
+
#if defined(MACOS_ENABLED) || (defined(__ANDROID_API__) && __ANDROID_API__ >= 28)
// Random location for getentropy. Fitting.
#include <sys/random.h>
@@ -650,7 +656,7 @@ Error OS_Unix::open_dynamic_library(const String p_path, void *&p_library_handle
path = get_executable_path().get_base_dir().path_join("../lib").path_join(p_path.get_file());
}
- p_library_handle = dlopen(path.utf8().get_data(), RTLD_NOW | RTLD_DEEPBIND);
+ p_library_handle = dlopen(path.utf8().get_data(), GODOT_DLOPEN_MODE);
ERR_FAIL_NULL_V_MSG(p_library_handle, ERR_CANT_OPEN, vformat("Can't open dynamic library: %s. Error: %s.", p_path, dlerror()));
if (r_resolved_path != nullptr) {