GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GH-97002: Prevent `_PyInterpreterFrame`s from backing more than one `PyFrameObject` by brandtbucher · Pull Request #97996 · python/cpython

Conversation

@brandtbucher

@brandtbucher brandtbucher commented Oct 6, 2022 •
edited by bedevere-bot
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

There is a nasty situation where a GC collection during PyFrameObject allocation could create multiple PyFrameObjects for the same _PyInterpreterFrame, which breaks our ownership rules and creates all sorts of opportunities for accessing corrupted memory.

If this happens, we just keep the PyFrameObject that has already been exposed to user code, and throw away the duplicate.

  • Issue: Multiple PyFrameObjects can be created for a single _PyInterpreterFrame #97002

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

jdevries3133 reacted with eyes emoji
All reactions
  • 👀 1 reaction
brandtbucher added 4 commits October 6, 2022 02:13
@brandtbucher
Add failing regression test
ce322b3
@brandtbucher
Prevent frame ownership conflicts
7ee32d6
@brandtbucher
blurb add
5e0e3ad
@brandtbucher
make patchcheck
045658c
@brandtbucher brandtbucher added sprint interpreter-core (Objects, Python, Grammar, and Parser dirs) type-crash A hard crash of the interpreter, possibly with a core dump needs backport to 3.11 only security fixes labels Oct 6, 2022
@brandtbucher brandtbucher self-assigned this Oct 6, 2022
@bedevere-bot bedevere-bot added the awaiting core review label Oct 6, 2022
@brandtbucher
brandtbucher requested a review from markshannon October 6, 2022 21:38
@markshannon
markshannon merged commit 21a2d9f into python:main Oct 6, 2022
@bedevere-bot bedevere-bot removed the awaiting core review label Oct 6, 2022
@miss-islington

miss-islington commented Oct 6, 2022

Copy link
Copy Markdown
Contributor

Thanks @brandtbucher for the PR, and @markshannon for merging it 🌮🎉.. I'm working now to backport this PR to: 3.11.
🐍🍒⛏🤖

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@bedevere-bot bedevere-bot removed the needs backport to 3.11 only security fixes label Oct 6, 2022
@bedevere-bot

bedevere-bot commented Oct 6, 2022

Copy link
Copy Markdown

GH-98002 is a backport of this pull request to the 3.11 branch.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

miss-islington pushed a commit to miss-islington/cpython that referenced this pull request Oct 6, 2022
@brandtbucher @miss-islington
pythonGH-97002: Prevent _PyInterpreterFrames from backing more than…
1b2ea2e
… one `PyFrameObject` (pythonGH-97996)

(cherry picked from commit 21a2d9f)

Co-authored-by: Brandt Bucher <[email protected]>
carljm added a commit to carljm/cpython that referenced this pull request Oct 8, 2022
@carljm
Merge branch 'main' into typewatch
415ed49
* main:
  pythonGH-97002: Prevent `_PyInterpreterFrame`s from backing more than one `PyFrameObject` (pythonGH-97996)
  pythongh-97973: Return all necessary information from the tokenizer (pythonGH-97984)
  fixes pythongh-96078: os.sched_yield release the GIL while calling sched_yield(2). (pythongh-97965)
  pythongh-65961: Do not rely solely on `__cached__` (pythonGH-97990)
  pythongh-97850: Remove the open issues section from the import reference (python#97935)
  Docs: pin sphinx-lint (pythonGH-97992)
  pythongh-94590: add signatures to operator itemgetter, attrgetter, methodcaller (python#94591)
  Add Pynche's move to the What's new in 3.11 (python#97974)
  pythongh-97781: Apply changes from importlib_metadata 5. (pythonGH-97785)
  pythongh-86482: Document assignment expression need for ()s (python#23291)
  pythongh-97943: PyFunction_GetAnnotations should return a borrowed reference. (python#97949)
mpage pushed a commit to mpage/cpython that referenced this pull request Oct 11, 2022
@brandtbucher @mpage
pythonGH-97002: Prevent _PyInterpreterFrames from backing more than…
cea3697
… one `PyFrameObject` (pythonGH-97996)
andersk
andersk reviewed Jun 26, 2023
View reviewed changes
Comment thread Python/frame.c
// Just pretend that we have an owned, cleared frame so frame_dealloc
// doesn't make the situation worse:
f->f_frame = (_PyInterpreterFrame *)f->_f_frame_data;
f->f_frame->owner = FRAME_CLEARED;

@andersk andersk Jun 26, 2023 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FRAME_CLEARED is a value of enum _framestate. Shouldn’t ->owner be a value of enum _frameowner instead?

GH-106156

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@markshannon markshannon Awaiting requested review from markshannon
1 more reviewer
@andersk andersk andersk left review comments
Reviewers whose approvals may not affect merge requirements

Uh oh!

There was an error while loading. Please reload this page.

Assignees

@brandtbucher brandtbucher

Labels

interpreter-core (Objects, Python, Grammar, and Parser dirs) sprint type-crash A hard crash of the interpreter, possibly with a core dump

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

5 participants

@brandtbucher @miss-islington @bedevere-bot @andersk @markshannon
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.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.