diff options
| author | Augusto Noronha <anoronha@apple.com> | 2025-10-08 15:35:24 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-08 15:35:24 -0700 |
| commit | 397181d5c191cf2f7ba3b4408383da6e5a149052 (patch) | |
| tree | b7764eb692e0ae6f9acbda95ad9eb23bd092cf4e /lldb/source/Target/Target.cpp | |
| parent | 4e6ee0b674cb84422d78e0cf0416754660f38972 (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.cpp | 4 |
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(); |
