[msan] Handle dlopen() failure in dlopen interceptor.

llvm-svn: 177728
This commit is contained in:
Evgeniy Stepanov 2013-03-22 11:59:49 +00:00
parent be0d173099
commit ecbf64648f
2 changed files with 8 additions and 1 deletions

View File

@ -807,7 +807,7 @@ INTERCEPTOR(void *, dlopen, const char *filename, int flag) {
EnterLoader();
link_map *map = (link_map *)REAL(dlopen)(filename, flag);
ExitLoader();
if (!__msan_has_dynamic_component()) {
if (!__msan_has_dynamic_component() && map) {
// If msandr didn't clear the shadow before the initializers ran, we do it
// ourselves afterwards.
UnpoisonMappedDSO(map);

View File

@ -1397,6 +1397,13 @@ TEST(MemorySanitizer, dlopen) {
delete[] path;
}
// Regression test for a crash in dlopen() interceptor.
TEST(MemorySanitizer, dlopenFailed) {
const char *path = "/libmsan_loadable_does_not_exist.x86_64.so";
void *lib = dlopen(path, RTLD_LAZY);
ASSERT_EQ(0, lib);
}
} // namespace
TEST(MemorySanitizer, scanf) {