Tentative fix proposal for thread crash after shared object unload #3988
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Resolved issues:
#3987
Description of changes:
s2n never clears the thread local slot associated with
s2n_per_thread_rand_state_key
which has a destructor callback. If s2n is unloaded before the callback is set to be invoked, a crash occurs when it is invoked.This updates thread local cleanup of the random module to zero out the value associated with the
s2n_per_thread_rand_state_key
slot, preventing an invalid destructor callback when s2n was properly shut down before module unload.Call-outs:
I am unsure if
s2n_rand_cleanup_thread
can be called whiles2n_per_thread_rand_state_key
is uninitialized. If that is the case, then error checking the result ofpthread_setspecific
might not be a good idea (if failure in turn disrupts succeeding cleanup).Testing:
This change was tested by before-and-after runs of the small repro program in the original issue. A standalone test that reproduced that might be nice and if requested I could try and put that together as well.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.