Skip to content

Commit 10c5245

Browse files
committed
[lldb] Fix use after free on ModuleList::RemoveSharedModuleIfOrphaned
This fixes a potential use after free where ModuleList::RemoveSharedModuleIfOrphaned -> SharedModuleList::RemoveIfOrphaned -> SharedModuleList::RemoveFromMap would potentially dereference a freed pointer. This fixes it by not calling ModuleList::RemoveSharedModuleIfOrphaned at all if the pointer was just freed.
1 parent 3960ff6 commit 10c5245

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

lldb/source/Target/Target.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2564,9 +2564,12 @@ ModuleSP Target::GetOrCreateModule(const ModuleSpec &orig_module_spec,
25642564
m_images.Append(module_sp, notify);
25652565

25662566
for (ModuleSP &old_module_sp : replaced_modules) {
2567+
auto use_count = old_module_sp.use_count();
25672568
Module *old_module_ptr = old_module_sp.get();
25682569
old_module_sp.reset();
2569-
ModuleList::RemoveSharedModuleIfOrphaned(old_module_ptr);
2570+
// If the use count was one, this was not in the shared module list.
2571+
if (use_count > 1)
2572+
ModuleList::RemoveSharedModuleIfOrphaned(old_module_ptr);
25702573
}
25712574
} else
25722575
module_sp.reset();

0 commit comments

Comments
 (0)