summaryrefslogtreecommitdiff
path: root/lldb/source/Target/Target.cpp
diff options
context:
space:
mode:
authorAugusto Noronha <anoronha@apple.com>2025-10-08 15:35:24 -0700
committerGitHub <noreply@github.com>2025-10-08 15:35:24 -0700
commit397181d5c191cf2f7ba3b4408383da6e5a149052 (patch)
treeb7764eb692e0ae6f9acbda95ad9eb23bd092cf4e /lldb/source/Target/Target.cpp
parent4e6ee0b674cb84422d78e0cf0416754660f38972 (diff)
[lldb] Fix use after free on ModuleList::RemoveSharedModuleIfOrphaned (#155331)
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.
Diffstat (limited to 'lldb/source/Target/Target.cpp')
-rw-r--r--lldb/source/Target/Target.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index e0286c4576ae..e224a12e3346 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -2567,9 +2567,9 @@ ModuleSP Target::GetOrCreateModule(const ModuleSpec &orig_module_spec,
m_images.Append(module_sp, notify);
for (ModuleSP &old_module_sp : replaced_modules) {
- Module *old_module_ptr = old_module_sp.get();
+ auto old_module_wp = old_module_sp->weak_from_this();
old_module_sp.reset();
- ModuleList::RemoveSharedModuleIfOrphaned(old_module_ptr);
+ ModuleList::RemoveSharedModuleIfOrphaned(old_module_wp);
}
} else
module_sp.reset();