Browse Source

Merge pull request #84210 from dsnopek/gdextension-san-no-deepbind

Linux: Disable `RTLD_DEEPBIND` mode for `dlopen()` in sanitizer builds
Rémi Verschelde 1 year ago
parent
commit
4c87145066
1 changed files with 7 additions and 1 deletions
  1. 7 1
      drivers/unix/os_unix.cpp

+ 7 - 1
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) {