Skip to content

[3.13][3.14] gh-143988: Fix re-entrant mutation crashes in socket sendmsg/recvmsg_into (#143987) (#151251)#151256

Merged
vstinner merged 1 commit into
python:3.13from
vstinner:socket_mut13
Jun 10, 2026
Merged

[3.13][3.14] gh-143988: Fix re-entrant mutation crashes in socket sendmsg/recvmsg_into (#143987) (#151251)#151256
vstinner merged 1 commit into
python:3.13from
vstinner:socket_mut13

Conversation

@vstinner

Copy link
Copy Markdown
Member

gh-143988: Fix re-entrant mutation crashes in socket sendmsg/recvmsg_into (#143987)

Fix crashes in socket.sendmsg() and socket.recvmsg_into() that could occur if buffer sequences are mutated re-entrantly during argument parsing via buffer protocol callbacks.

The bug occurs because:

  1. PySequence_Fast() returns the original list object when the input is already a list (not a copy).
  2. During iteration, PyObject_GetBuffer() triggers buffer callbacks which may clear the list.
  3. Subsequent iterations access invalid memory (heap OOB read).

The fix replaces PySequence_Fast() with PySequence_Tuple() which always creates a new tuple, ensuring the sequence cannot be mutated during iteration.

(cherry picked from commit 896f7fd)

(cherry picked from commit 632daaf)

…dmsg/recvmsg_into (python#143987) (python#151251)

pythongh-143988: Fix re-entrant mutation crashes in socket sendmsg/recvmsg_into (python#143987)

Fix crashes in socket.sendmsg() and socket.recvmsg_into() that could
occur if buffer sequences are mutated re-entrantly during argument
parsing via __buffer__ protocol callbacks.

The bug occurs because:

1. PySequence_Fast() returns the original list object when the input
   is already a list (not a copy).
2. During iteration, PyObject_GetBuffer() triggers __buffer__
   callbacks which may clear the list.
3. Subsequent iterations access invalid memory (heap OOB read).

The fix replaces PySequence_Fast() with PySequence_Tuple() which
always creates a new tuple, ensuring the sequence cannot be mutated
during iteration.

(cherry picked from commit 896f7fd)

Co-authored-by: tonghuaroot (童话) <tonghuaroot@gmail.com>
Co-authored-by: tonghuaroot <23011166+tonghuaroot@users.noreply.github.com>
(cherry picked from commit 632daaf)
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