Skip to content

gh-161235: Make the signal handler table safe thread safe without a lock - #161363

Draft
johng wants to merge 2 commits into
python:mainfrom
johng:signalmodule-hanlder-free-fix
Draft

johng wants to merge 2 commits into
python:mainfrom
johng:signalmodule-hanlder-free-fix

Conversation

@johng

@johng johng commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Utilise atomic_exchange and QSBR to ensure that accessing an old handler does not result in a potential UAF. This fixes 2 out of 3 race conditions identified in the issue.

Swapping signal handlers can result in a UAF if another thread accesses the old handler slot that could have been freed. On swapping the old reference is given to the caller, however other accessors such as in the signal handler function do not maintain a strong reference. Taking a strong reference there could equally race too.

The proposed solution in the attached issue is to deference only at a quiescent point, this enables lock free access yet callers under most circumstances can be sure the handler won't be freed.

Happy to discuss this further on the parent issue if wider design discussion should be preferred at this stage, this PR is to demonstrate the first proposed solution from the issue.

Utilise atomic_exchange and `QSBR` to ensure that accessing an old
handler does not result in a potential UAF.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant