winch: Fix bounds checks for dynamic heaps #8001
Merged
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 commit fixes a fuzz bug in which the current implementation was incorrectly clobbering the index register of a memory access (for addition overflow check) and then using that same clobbered register to perform the memory access. The clobbered register contained the value:
index + offset + access_size
, which resulting in an incorrect access and consequently in an incorrectHeapOutOfBounds
trap.This bug is only reproducible when modifying Wasmtime's memory settings, forcing the heap to be treated as
Dynamic
.Currently in Winch there's no easy way to have specific Wasmtime configurations, so having a filetests for this case is not straightforward. I've opted to add an integration test, in which it's easier to configure Wasmtime.
Note that the
tests/all/winch.rs
file is temporary, and the plan is to execute all the other integration tests with Winch at some point. In the case ofmemory.rs
, that will be once Winch supportsmemory64
hoping to reduce the amount of code needed in order to integrate Winch.