[all-commits] [llvm/llvm-project] 44a1f7: [lldb] Fix unsafe map mutation in ProcessElfCore::...

David Peixotto via All-commits all-commits at lists.llvm.org
Thu Sep 18 08:20:31 PDT 2025


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 44a1f7e7cabebff853ccfbbb669f79673a2ec335
      https://github.com/llvm/llvm-project/commit/44a1f7e7cabebff853ccfbbb669f79673a2ec335
  Author: David Peixotto <peix at meta.com>
  Date:   2025-09-18 (Thu, 18 Sep 2025)

  Changed paths:
    M lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp
    M lldb/test/API/functionalities/postmortem/netbsd-core/TestNetBSDCore.py

  Log Message:
  -----------
  [lldb] Fix unsafe map mutation in ProcessElfCore::FindModuleUUID (#159444)

The `ProcessElfCore::FindModuleUUID` function can be called by multiple
threads at the same time when `target.parallel-module-load` is true. We
were using the `operator[]` to lookup the UUID which will mutate the map
when the key is not present. This is unsafe in a multi-threaded contex
so we now use a read-only `find` operation and explicitly return an
invalid UUID when the key is not present.

The `m_uuids` map can follow a create-then-query pattern. It is
populated in the `DoLoadCore` function which looks like it is only
called in a single-threaded context so we do not need extra locking as
long as we keep the other accesses read-only.

Other fixes I considered

* Use a lock to protect access - We don't need to modify the map after
creation so we can allow concurrent read-only access.
* Store the map in a const pointer container to prevent accidental
mutation in other places.
     - Only accessed in one place currently so just added a comment.
* Store the UUID in the NT_FILE_Entry after building the mapping
correctly in `UpdateBuildIdForNTFileEntries`. - The map lets us avoid a
linear search in `FindModuleUUID`.

This commit also reverts the temporary workaround from #159395 which
disabled parallel module loading to avoid the test failure.

Fixes #159377



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list