fix: block adversarial exploit of non-aborting assert! - #8559
Merged
Conversation
|
Mathlib CI status (docs):
|
leodemoura
added a commit
that referenced
this pull request
May 31, 2025
This PR is similar to #8559, but for `Expr.mkData`
digama0
reviewed
May 31, 2025
| let r : UInt64 := h.toUInt32.toUInt64 + hasMVar.toUInt64.shiftLeft 32 + hasParam.toUInt64.shiftLeft 33 + depth.toUInt64.shiftLeft 40 | ||
| r | ||
| @[extern "lean_level_mk_data"] | ||
| opaque Level.mkData (h : UInt64) (depth : Nat := 0) (hasMVar hasParam : Bool := false) : Level.Data |
Collaborator
There was a problem hiding this comment.
Note that it is still possible to prove that Level.Data is finite here, because it is not opaque type, and moreover Level.Data.depth returns a UInt32. If you are going to use this approach, please at least take the modification to lower the max bvar range to 2^20-2, so that it is at least possible to prove that there exists a sound implementation of the function which is indistinguishable from the real one without hitting a panic.
Collaborator
There was a problem hiding this comment.
Or alternatively, make Level.depth and Expr.looseBVarRange opaque, so that it cannot be seen that they are implemented by projecting out of a finite type.
This was referenced Jun 16, 2025
kim-em
added a commit
to kim-em/lean4lean
that referenced
this pull request
Aug 2, 2026
State the trust claim narrowly: `mkData_eq` is a chosen total specification for the opaque constant, sound for runs that do not abort, not a claim about what the implementation computes. Record that the `panic!` model was a copy of the pre-`@[extern]` Lean definition, i.e. of the bug fixed by leanprover/lean4#8559. Merge `mkData_hasParam` and `mkData_hasMVar` into a single `mkData_flags`, matching `Expr.mkData_flags`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y5K6isCtnCB86J8fRbVTKS
kim-em
added a commit
to kim-em/lean4lean
that referenced
this pull request
Aug 2, 2026
leanprover/lean4#8554 is a closed PR, not an issue, and it proposed saturating; the merged fixes are leanprover/lean4#8559 for `Level` and leanprover/lean4#8560 for `Expr`, both of which abort. Rest the choice of total extension on the abort semantics alone. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y5K6isCtnCB86J8fRbVTKS
kim-em
added a commit
to kim-em/lean4lean
that referenced
this pull request
Aug 3, 2026
State the trust claim narrowly: `mkData_eq` is a chosen total specification for the opaque constant, sound for runs that do not abort, not a claim about what the implementation computes. Record that the `panic!` model was a copy of the pre-`@[extern]` Lean definition, i.e. of the bug fixed by leanprover/lean4#8559. Merge `mkData_hasParam` and `mkData_hasMVar` into a single `mkData_flags`, matching `Expr.mkData_flags`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y5K6isCtnCB86J8fRbVTKS
kim-em
added a commit
to kim-em/lean4lean
that referenced
this pull request
Aug 3, 2026
leanprover/lean4#8554 is a closed PR, not an issue, and it proposed saturating; the merged fixes are leanprover/lean4#8559 for `Level` and leanprover/lean4#8560 for `Expr`, both of which abort. Rest the choice of total extension on the abort semantics alone. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y5K6isCtnCB86J8fRbVTKS
kim-em
added a commit
to kim-em/lean4lean
that referenced
this pull request
Aug 4, 2026
State the trust claim narrowly: `mkData_eq` is a chosen total specification for the opaque constant, sound for runs that do not abort, not a claim about what the implementation computes. Record that the `panic!` model was a copy of the pre-`@[extern]` Lean definition, i.e. of the bug fixed by leanprover/lean4#8559. Merge `mkData_hasParam` and `mkData_hasMVar` into a single `mkData_flags`, matching `Expr.mkData_flags`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y5K6isCtnCB86J8fRbVTKS
kim-em
added a commit
to kim-em/lean4lean
that referenced
this pull request
Aug 4, 2026
leanprover/lean4#8554 is a closed PR, not an issue, and it proposed saturating; the merged fixes are leanprover/lean4#8559 for `Level` and leanprover/lean4#8560 for `Expr`, both of which abort. Rest the choice of total extension on the abort semantics alone. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y5K6isCtnCB86J8fRbVTKS
kim-em
added a commit
to kim-em/lean4lean
that referenced
this pull request
Aug 6, 2026
State the trust claim narrowly: `mkData_eq` is a chosen total specification for the opaque constant, sound for runs that do not abort, not a claim about what the implementation computes. Record that the `panic!` model was a copy of the pre-`@[extern]` Lean definition, i.e. of the bug fixed by leanprover/lean4#8559. Merge `mkData_hasParam` and `mkData_hasMVar` into a single `mkData_flags`, matching `Expr.mkData_flags`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y5K6isCtnCB86J8fRbVTKS
kim-em
added a commit
to kim-em/lean4lean
that referenced
this pull request
Aug 6, 2026
leanprover/lean4#8554 is a closed PR, not an issue, and it proposed saturating; the merged fixes are leanprover/lean4#8559 for `Level` and leanprover/lean4#8560 for `Expr`, both of which abort. Rest the choice of total extension on the abort semantics alone. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y5K6isCtnCB86J8fRbVTKS
kim-em
added a commit
to kim-em/lean4lean
that referenced
this pull request
Aug 12, 2026
State the trust claim narrowly: `mkData_eq` is a chosen total specification for the opaque constant, sound for runs that do not abort, not a claim about what the implementation computes. Record that the `panic!` model was a copy of the pre-`@[extern]` Lean definition, i.e. of the bug fixed by leanprover/lean4#8559. Merge `mkData_hasParam` and `mkData_hasMVar` into a single `mkData_flags`, matching `Expr.mkData_flags`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y5K6isCtnCB86J8fRbVTKS
kim-em
added a commit
to kim-em/lean4lean
that referenced
this pull request
Aug 12, 2026
leanprover/lean4#8554 is a closed PR, not an issue, and it proposed saturating; the merged fixes are leanprover/lean4#8559 for `Level` and leanprover/lean4#8560 for `Expr`, both of which abort. Rest the choice of total extension on the abort semantics alone. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y5K6isCtnCB86J8fRbVTKS
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
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.
This PR fixes an adversarial soundness attack described in #8554. The attack exploits the fact that
assert!no longer aborts execution, and that users can redirect error messages.Another PR will implement the same fix for
Expr.Data.