Skip to content

Commit

Permalink
LibWasm: Ensure that global.get only accesses imports in const exprs
Browse files Browse the repository at this point in the history
  • Loading branch information
dzfrias authored and alimpfard committed Jun 18, 2024
1 parent 596dd52 commit bd97091
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,8 @@ InstantiationResult AbstractMachine::instantiate(Module const& module, Vector<Ex
for (auto& entry : externs) {
if (auto* ptr = entry.get_pointer<GlobalAddress>())
auxiliary_instance.globals().append(*ptr);
else if (auto* ptr = entry.get_pointer<FunctionAddress>())
auxiliary_instance.functions().append(*ptr);
}

Vector<FunctionAddress> module_functions;
Expand Down Expand Up @@ -253,7 +255,7 @@ InstantiationResult AbstractMachine::instantiate(Module const& module, Vector<Ex
if (m_should_limit_instruction_count)
config.enable_instruction_count_limit();
config.set_frame(Frame {
main_module_instance,
auxiliary_instance,
Vector<Value> {},
entry,
entry.instructions().size(),
Expand Down Expand Up @@ -306,7 +308,7 @@ InstantiationResult AbstractMachine::instantiate(Module const& module, Vector<Ex
if (m_should_limit_instruction_count)
config.enable_instruction_count_limit();
config.set_frame(Frame {
main_module_instance,
auxiliary_instance,
Vector<Value> {},
active_ptr->expression,
1,
Expand Down Expand Up @@ -361,7 +363,7 @@ InstantiationResult AbstractMachine::instantiate(Module const& module, Vector<Ex
if (m_should_limit_instruction_count)
config.enable_instruction_count_limit();
config.set_frame(Frame {
main_module_instance,
auxiliary_instance,
Vector<Value> {},
data.offset,
1,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -728,6 +728,9 @@ void BytecodeInterpreter::interpret(Configuration& configuration, InstructionPoi
}
case Instructions::global_get.value(): {
auto global_index = instruction.arguments().get<GlobalIndex>();
// This check here is for const expressions. In non-const expressions,
// a validation error would have been thrown.
TRAP_IF_NOT(global_index < configuration.frame().module().globals().size());
auto address = configuration.frame().module().globals()[global_index.value()];
dbgln_if(WASM_TRACE_DEBUG, "global({}) -> stack", address.value());
auto global = configuration.store().get(address);
Expand Down

0 comments on commit bd97091

Please sign in to comment.