From f3569d26d4619d558562263a3da454bd3ee52baf Mon Sep 17 00:00:00 2001 From: Ben Langmuir Date: Wed, 21 Oct 2015 23:12:45 +0000 Subject: [PATCH] Fix use-after-free in ModuleManager When removing out-of-date modules we might have left behind a VisitOrder that contains pointers to freed ModuleFiles. This was very rarely seen, because it only happens when modules go out of date and the VisitOrder happens to have the right size to not be recomputed. Thanks ASan! rdar://23181512 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@250963 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Serialization/ModuleManager.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/Serialization/ModuleManager.cpp b/lib/Serialization/ModuleManager.cpp index f9d0fa469b..74f75a103f 100644 --- a/lib/Serialization/ModuleManager.cpp +++ b/lib/Serialization/ModuleManager.cpp @@ -194,6 +194,9 @@ void ModuleManager::removeModules( if (first == last) return; + // Explicitly clear VisitOrder since we might not notice it is stale. + VisitOrder.clear(); + // Collect the set of module file pointers that we'll be removing. llvm::SmallPtrSet victimSet(first, last); -- 2.50.1