FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

[3.14] gh-144563: Fix remote debugging with duplicate libpython mappings from ctypes (GH-144595) by johnslavik · Pull Request #144655 · python/cpython · GitHub

Repository navigation

[3.14] gh-144563: Fix remote debugging with duplicate libpython mappings from ctypes (GH-144595) - #144655

Merged
pablogsal merged 1 commit into
python:3.14from
johnslavik:backport-2c1ca6b-3.14
Feb 10, 2026
Merged

pablogsal merged 1 commit into
python:3.14from
johnslavik:backport-2c1ca6b-3.14

Conversation

johnslavik commented Feb 10, 2026 •
edited by bedevere-app Bot
Loading

Copy link
Copy Markdown
Member

When _ctypes is imported, it may call dlopen on the libpython shared library, causing the dynamic linker to load a second mapping of the library into the process address space. The remote debugging code iterates memory regions from low addresses upward and returns the first mapping whose filename matches libpython. After _ctypes is imported, it finds the dlopen'd copy first, but that copy's PyRuntime section was never initialized, so reading debug offsets from it fails.

Fix this by validating each candidate PyRuntime address before accepting it. The validation reads the first 8 bytes and checks for the "xdebugpy" cookie that is only present in an initialized PyRuntime. Uninitialized duplicate mappings will fail this check and be skipped, allowing the search to continue to the real, initialized PyRuntime. (cherry picked from commit 2c1ca6b)

… mappings from ctypes (pythonGH-144595)

When _ctypes is imported, it may call dlopen on the libpython shared
library, causing the dynamic linker to load a second mapping of the
library into the process address space. The remote debugging code
iterates memory regions from low addresses upward and returns the first
mapping whose filename matches libpython. After _ctypes is imported, it
finds the dlopen'd copy first, but that copy's PyRuntime section was
never initialized, so reading debug offsets from it fails.

Fix this by validating each candidate PyRuntime address before accepting
it. The validation reads the first 8 bytes and checks for the "xdebugpy"
cookie that is only present in an initialized PyRuntime. Uninitialized
duplicate mappings will fail this check and be skipped, allowing the
search to continue to the real, initialized PyRuntime.
(cherry picked from commit 2c1ca6b)

Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
pablogsal marked this pull request as ready for review February 10, 2026 10:36
pablogsal merged commit 616e611 into python:3.14 Feb 10, 2026
49 checks passed
johnslavik deleted the backport-2c1ca6b-3.14 branch July 21, 2026 01:56
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
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


Back | FazBrowse Home | New Git URL