Skip to content

Conversation

ryanofsky
Copy link
Collaborator

@ryanofsky ryanofsky commented Aug 9, 2024

Currently ThreadContext Connection* pointers are not removed up when a connection is destroyed. This is only a problem if a Connection instance is destroyed and new Connection is allocated at the same address, because the code assumes pointers uniquely identify connections. This causes a bug in a bitcoin IPC test which creates multiple connections in a loop, described in bitcoin/bitcoin#30509 (comment), and depending on how the heap allocator behaves, a new Connection could have the same address as a previously destroyed connection, and the code tries to use a thread reference associated with the previous connection when making a new call, and there is a segfault because the thread no longer exists.

Fix this problem by adding Connection cleanup callbacks to remove Connection* pointers from the ThreadContext struct if the connection is destroyed before the thread is.

Currently ThreadContext Connection* pointers are not removed up when a
connection is destroyed. This is only a problem if a Connection instance is
destroyed and new Connection is allocated at the same address, because the code
assumes pointers uniquely identify connections. This causes a bug in a bitcoin
IPC test which creates multiple connections in a loop, described in
bitcoin/bitcoin#30509 (comment), where
connections are created and destroyed in a loop, and depending on how the heap
allocator behaves, a new Connection could have the same address as a previously
destroyed connection, and the code tries to use a thread reference associated
with the previous connection when making a new call, and there is a segfault
because the thread no longer exists.

Fix this problem by adding Connection cleanup callbacks to remove Connection*
pointers from the ThreadContext struct if the connection is destroyed before
the thread is.
ryanofsky added a commit to ryanofsky/bitcoin that referenced this pull request Aug 9, 2024
@ryanofsky ryanofsky merged commit c1b4ab4 into bitcoin-core:master Aug 9, 2024
ryanofsky added a commit to ryanofsky/bitcoin that referenced this pull request Aug 9, 2024
…d ThreadContext bugfix

The CustomMessage functions allow simplifying custom IPC type code, and the
bugfix is needed to prevent in a crash in a new test which creates and destroys
connections in a loop. Upstream PRs are:

bitcoin-core/libmultiprocess#105 types: Add Custom{Build,Read,Pass}Message hooks
bitcoin-core/libmultiprocess#106 Bugfix: Clean up ThreadContext pointers when Connection is destroyed
Sjors pushed a commit to Sjors/bitcoin that referenced this pull request Aug 13, 2024
…d ThreadContext bugfix

The CustomMessage functions allow simplifying custom IPC type code, and the
bugfix is needed to prevent in a crash in a new test which creates and destroys
connections in a loop. Upstream PRs are:

bitcoin-core/libmultiprocess#105 types: Add Custom{Build,Read,Pass}Message hooks
bitcoin-core/libmultiprocess#106 Bugfix: Clean up ThreadContext pointers when Connection is destroyed
Sjors pushed a commit to Sjors/bitcoin that referenced this pull request Aug 13, 2024
…d ThreadContext bugfix

The CustomMessage functions allow simplifying custom IPC type code, and the
bugfix is needed to prevent in a crash in a new test which creates and destroys
connections in a loop. Upstream PRs are:

bitcoin-core/libmultiprocess#105 types: Add Custom{Build,Read,Pass}Message hooks
bitcoin-core/libmultiprocess#106 Bugfix: Clean up ThreadContext pointers when Connection is destroyed
ryanofsky added a commit to ryanofsky/bitcoin that referenced this pull request Sep 6, 2024
…d ThreadContext bugfix

The CustomMessage functions allow simplifying custom IPC type code, and the
bugfix is needed to prevent in a crash in a new test which creates and destroys
connections in a loop. Upstream PRs are:

bitcoin-core/libmultiprocess#105 types: Add Custom{Build,Read,Pass}Message hooks
bitcoin-core/libmultiprocess#106 Bugfix: Clean up ThreadContext pointers when Connection is destroyed
ryanofsky added a commit to ryanofsky/bitcoin that referenced this pull request Sep 6, 2024
…d ThreadContext bugfix

The CustomMessage functions allow simplifying custom IPC type code, and the
bugfix is needed to prevent in a crash in a new test which creates and destroys
connections in a loop. Upstream PRs are:

bitcoin-core/libmultiprocess#105 types: Add Custom{Build,Read,Pass}Message hooks
bitcoin-core/libmultiprocess#106 Bugfix: Clean up ThreadContext pointers when Connection is destroyed
ryanofsky added a commit to ryanofsky/bitcoin that referenced this pull request Sep 6, 2024
…d ThreadContext bugfix

The CustomMessage functions allow simplifying custom IPC type code, and the
bugfix is needed to prevent in a crash in a new test which creates and destroys
connections in a loop. Upstream PRs are:

bitcoin-core/libmultiprocess#105 types: Add Custom{Build,Read,Pass}Message hooks
bitcoin-core/libmultiprocess#106 Bugfix: Clean up ThreadContext pointers when Connection is destroyed
ryanofsky added a commit to ryanofsky/bitcoin that referenced this pull request Sep 6, 2024
…d ThreadContext bugfix

The CustomMessage functions allow simplifying custom IPC type code, and the
bugfix is needed to prevent in a crash in a new test which creates and destroys
connections in a loop. Upstream PRs are:

bitcoin-core/libmultiprocess#105 types: Add Custom{Build,Read,Pass}Message hooks
bitcoin-core/libmultiprocess#106 Bugfix: Clean up ThreadContext pointers when Connection is destroyed
ryanofsky added a commit to ryanofsky/bitcoin that referenced this pull request Sep 9, 2024
…nd cmake headers target

This update brings in the following changes:

bitcoin-core/libmultiprocess#105 types: Add Custom{Build,Read,Pass}Message hooks
bitcoin-core/libmultiprocess#106 Bugfix: Clean up ThreadContext pointers when Connection is destroyed
bitcoin-core/libmultiprocess#107 example: Remove manual client adding
bitcoin-core/libmultiprocess#108 doc: Add comments for socket descriptor handling when forking
bitcoin-core/libmultiprocess#109 example: Add missing thread.join() call so example can exit cleanly
bitcoin-core/libmultiprocess#110 cmake: add target_capnp_sources headers target
ryanofsky added a commit to ryanofsky/bitcoin that referenced this pull request Sep 10, 2024
…nd cmake headers target

This update brings in the following changes:

bitcoin-core/libmultiprocess#105 types: Add Custom{Build,Read,Pass}Message hooks
bitcoin-core/libmultiprocess#106 Bugfix: Clean up ThreadContext pointers when Connection is destroyed
bitcoin-core/libmultiprocess#107 example: Remove manual client adding
bitcoin-core/libmultiprocess#108 doc: Add comments for socket descriptor handling when forking
bitcoin-core/libmultiprocess#109 example: Add missing thread.join() call so example can exit cleanly
bitcoin-core/libmultiprocess#110 cmake: add target_capnp_sources headers target
janus pushed a commit to BitgesellOfficial/bitgesell that referenced this pull request Jan 12, 2025
…d ThreadContext bugfix

The CustomMessage functions allow simplifying custom IPC type code, and the
bugfix is needed to prevent in a crash in a new test which creates and destroys
connections in a loop. Upstream PRs are:

bitcoin-core/libmultiprocess#105 types: Add Custom{Build,Read,Pass}Message hooks
bitcoin-core/libmultiprocess#106 Bugfix: Clean up ThreadContext pointers when Connection is destroyed
@bitcoin-core bitcoin-core locked and limited conversation to collaborators Aug 9, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant