Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pymodule: only allow initializing once per process #2523

Merged
merged 1 commit into from
Aug 10, 2022

Conversation

davidhewitt
Copy link
Member

Following the suggestion in #2346 (comment) this changes #[pymodule] to raise an ImportError if initialised more than once. This seems to be a necessary defence against soundness issues related to sub-interpreters.

src/impl_/pymodule.rs Outdated Show resolved Hide resolved
@davidhewitt davidhewitt merged commit 8181160 into PyO3:main Aug 10, 2022
@davidhewitt davidhewitt deleted the init-once branch August 10, 2022 06:36
zer0def pushed a commit to zer0def/pyo3 that referenced this pull request Nov 8, 2024
Allow the subinterpreter safeguards to be disabled, so that applications
like Ceph's manager can continue to use pyo3 modules without soft
crashing.

Enabling this feature should be done with caution, as any storage of Py
objects in rust statics can lead to undefined behavior.

However, not all consumers of pyo3 use global state, and thus a subset
of them (such as python-bcrypt) are safe to use in subinterpreter
contexts.

References: bazaah/aur-ceph#20
References: PyO3#2523
References: pyca/cryptography#9016
References: PyO3#2346 (comment)
References: PyO3#2346 (comment)
References: PyO3#3451
Signed-off-by: Paul Stemmet <[email protected]>
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.

2 participants