Skip to content

Commit

Permalink
Merge #809
Browse files Browse the repository at this point in the history
809: Fix issue 800 - check index before accessing imports.globals r=syrusakbary a=pventuzelo

# Description

Fix issue #800 

* Check if `import_global_index` is valid i.e inside imports.globals range. 
* Related functions: 
  * validate_memories
  * validate_tables
  * finalize_memories
  * finalize_tables

# After the fix

``` sh
$ ./target/release/wasmer run index_oob_LocalBacking_validate_memories_152.wasm
execute_wasm: "Can\'t instantiate module: LinkError([Generic { message: \"incorrect global index for initializer\" }])"
--------------------------------------------------------------------------------------------------------
$ ./target/release/wasmer run index_oob_LocalBacking_validate_tables_276.wasm 
execute_wasm: "Can\'t instantiate module: LinkError([Generic { message: \"incorrect global index for initializer\" }])"
```

# Review

- [x] Create a short description of the the change in the CHANGELOG.md file


Co-authored-by: Patrick Ventuzelo <[email protected]>
Co-authored-by: Patrick Ventuzelo <[email protected]>
  • Loading branch information
3 people authored Sep 25, 2019
2 parents 7bf306e + b45a228 commit 231b1c2
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Blocks of changes will separated by version increments.

## **[Unreleased]**

- [#809](https://github.com/wasmerio/wasmer/pull/809) Fix bugs leading to panics in `LocalBacking`.
- [#822](https://github.com/wasmerio/wasmer/pull/822) Update Cranelift fork version to `0.43.1`
- [#829](https://github.com/wasmerio/wasmer/pull/829) Fix deps on `make bench-*` commands; benchmarks don't compile other backends now
- [#807](https://github.com/wasmerio/wasmer/pull/807) Implement Send for `Instance`, breaking change on `ImportObject`, remove method `get_namespace` replaced with `with_namespace` and `maybe_with_namespace`
Expand Down
20 changes: 20 additions & 0 deletions lib/runtime-core/src/backing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,11 @@ impl LocalBacking {
}]);
}
Initializer::GetGlobal(import_global_index) => {
if import_global_index.index() >= imports.globals.len() {
return Err(vec![LinkError::Generic {
message: "incorrect global index for initializer".to_string(),
}]);
}
if let Value::I32(x) = imports.globals[import_global_index].get() {
x as u32
} else {
Expand Down Expand Up @@ -208,6 +213,11 @@ impl LocalBacking {
}]);
}
Initializer::GetGlobal(import_global_index) => {
if import_global_index.index() >= imports.globals.len() {
return Err(vec![LinkError::Generic {
message: "incorrect global index for initializer".to_string(),
}]);
}
if let Value::I32(x) = imports.globals[import_global_index].get() {
x as u32
} else {
Expand Down Expand Up @@ -276,6 +286,11 @@ impl LocalBacking {
}]);
}
Initializer::GetGlobal(import_global_index) => {
if import_global_index.index() >= imports.globals.len() {
return Err(vec![LinkError::Generic {
message: "incorrect global index for initializer".to_string(),
}]);
}
if let Value::I32(x) = imports.globals[import_global_index].get() {
x as u32
} else {
Expand Down Expand Up @@ -329,6 +344,11 @@ impl LocalBacking {
}]);
}
Initializer::GetGlobal(import_global_index) => {
if import_global_index.index() >= imports.globals.len() {
return Err(vec![LinkError::Generic {
message: "incorrect global index for initializer".to_string(),
}]);
}
if let Value::I32(x) = imports.globals[import_global_index].get() {
x as u32
} else {
Expand Down

0 comments on commit 231b1c2

Please sign in to comment.