Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix[codegen]: fix assertions for certain precompiles #4451

Open
wants to merge 14 commits into
base: master
Choose a base branch
from

Conversation

charles-cooper
Copy link
Member

What I did

fix for GHSA-vgf2-gvx8-xwc3

How I did it

How to verify it

Commit message

Commit message for the final, squashed PR. (Optional, but reviewers will appreciate it! Please see our commit message style guide for what we would ideally like to see in a commit message.)

Description for the changelog

Cute Animal Picture

Put a link to a cute animal picture inside the parenthesis-->

in 93a9579, the assert for memory copying calls to the
identity precompile was optimized out; the reasoning being that if the
identity precompile fails due to OOG, the caller contract would also
likely fail with OOG. however, due to the 63/64ths rule, there are cases
where the identity precompile could fail with OOG, but the caller
contract has enough gas to successfully return out of the call context.

(note that even prior to 93a9579, some calls to the identity
precompile did not check the success flag. cf. commit cf03d27).

this only affects pre-cancun compilation targets, since post-cancun the
`mcopy` instruction is chosen. this commit fixes the identity precompile
call for pre-cancun targets.

a similar optimization was also applied in the past to omit the check
when calling the ecrecover precompile. a check for the ecrecover call is
applied in this commit.

while this is a performance regression, ecrecover is generally not a
hotspot; as for the identity precompile, it is only used by the compiler
for memory copies pre-cancun, so the performance regression there is not
too relevant (as of nov 2024).
Copy link

codecov bot commented Jan 14, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 92.01%. Comparing base (c208b95) to head (4b999e6).

Additional details and impacted files
@@           Coverage Diff           @@
##           master    #4451   +/-   ##
=======================================
  Coverage   92.01%   92.01%           
=======================================
  Files         119      119           
  Lines       16692    16692           
  Branches     2805     2805           
=======================================
  Hits        15359    15359           
  Misses        915      915           
  Partials      418      418           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@cyberthirst cyberthirst added the release - must release blocker label Jan 15, 2025
@cyberthirst
Copy link
Collaborator

aren't the tests using cancun?

gas_used - 1 will always revert. we want to supply enough gas that the
inner call will return 0 but the outer call will not oog.
@charles-cooper charles-cooper marked this pull request as ready for review January 16, 2025 15:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
release - must release blocker
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants