Skip to content

Mechanical guard: no call entry may leave a param slot unbound (hazard class behind #1661) #1666

Open

Description

@InauguralPhysicist

From the Opus 4.8 blind review of #1664, which PASSED. That PR closes the #1661 use-after-free at five call entries one by one, but it leaves the hazard CLASS open:

  • env_new does not scrub recycled freelist slots;
  • the JIT's OP_GET_LOCAL stays unchecked.

A future sixth call entry added without the null-fill would reopen the same use-after-free, and nothing mechanical would catch it. A runtime bounds check in the JIT is NOT the fix: GET_LOCAL is the hottest op (a call-heavy forced-JIT loop measured 477M Ir), and the check duplicates a structural invariant. Harden the invariant instead.

Done when

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:memorySubsystem: memorykind:gate-defectA gate, check or claim that measures less than it says

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions