lucet
lucet copied to clipboard
[lucetc] thread 'main' panicked in lucetc/src/module.rs:326
Environment
Questions | Answers |
---|---|
Related Binary | lucetc |
Commit | commit 2c2b035415703499c8d1e03ac54c12deb694fe45 |
Vulnerability/Issue
Thread 'main' panicked in lucetc/src/module.rs:326 due to undeclared wasm table in the module
Steps to reproduce the behavior
- Download: lucetc_panic_table.zip
- Run:
./target/release/lucetc lucetc_panic_table.wasm
Additional Informations
Crash
thread 'main' panicked at 'creation of elements for undeclared table! only table 0 is implicitly declared', lucetc/src/module.rs:326:21
Crash (RUST_BACKTRACE=1)
thread 'main' panicked at 'creation of elements for undeclared table! only table 0 is implicitly declared', lucetc/src/module.rs:326:21
stack backtrace:
0: backtrace::backtrace::libunwind::trace
at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.29/src/backtrace/libunwind.rs:88
1: backtrace::backtrace::trace_unsynchronized
at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.29/src/backtrace/mod.rs:66
2: std::sys_common::backtrace::_print
at src/libstd/sys_common/backtrace.rs:47
3: std::sys_common::backtrace::print
at src/libstd/sys_common/backtrace.rs:36
4: std::panicking::default_hook::{{closure}}
at src/libstd/panicking.rs:200
5: std::panicking::default_hook
at src/libstd/panicking.rs:214
6: std::panicking::rust_panic_with_hook
at src/libstd/panicking.rs:477
7: std::panicking::begin_panic
8: <lucetc::module::ModuleInfo as cranelift_wasm::environ::spec::ModuleEnvironment>::declare_table_elements
9: cranelift_wasm::sections_translator::parse_element_section
10: cranelift_wasm::module_translator::translate_module
11: lucetc::compiler::Compiler::new
12: lucetc::Lucetc::shared_object_file
13: lucetc::main
14: std::rt::lang_start::{{closure}}
15: std::rt::lang_start_internal::{{closure}}
at src/libstd/rt.rs:49
16: std::panicking::try::do_call
at src/libstd/panicking.rs:296
17: __rust_maybe_catch_panic
at src/libpanic_unwind/lib.rs:82
18: std::panicking::try
at src/libstd/panicking.rs:275
19: std::panic::catch_unwind
at src/libstd/panic.rs:394
20: std::rt::lang_start_internal
at src/libstd/rt.rs:48
21: main
22: __libc_start_main
23: _start
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
Crash (RUST_BACKTRACE=full)
stack backtrace:
0: 0x5646341698db - backtrace::backtrace::libunwind::trace::h9aefeba8a047a6fe
at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.29/src/backtrace/libunwind.rs:88
1: 0x5646341698db - backtrace::backtrace::trace_unsynchronized::hdf2f93b3a2c1de24
at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.29/src/backtrace/mod.rs:66
2: 0x5646341698db - std::sys_common::backtrace::_print::hd965b6bee154e2c5
at src/libstd/sys_common/backtrace.rs:47
3: 0x5646341698db - std::sys_common::backtrace::print::h1711ea6b4387aaa6
at src/libstd/sys_common/backtrace.rs:36
4: 0x5646341698db - std::panicking::default_hook::{{closure}}::h0b61452e607a4bdf
at src/libstd/panicking.rs:200
5: 0x5646341695b7 - std::panicking::default_hook::h0a165fe2804b5780
at src/libstd/panicking.rs:214
6: 0x56463416a050 - std::panicking::rust_panic_with_hook::ha3295d53a35861e3
at src/libstd/panicking.rs:477
7: 0x564633c798c5 - std::panicking::begin_panic::h1b36c41bf5110c2b
8: 0x564633c77fc2 - <lucetc::module::ModuleInfo as cranelift_wasm::environ::spec::ModuleEnvironment>::declare_table_elements::h54eb50e51087e108
9: 0x564633ec032e - cranelift_wasm::sections_translator::parse_element_section::h5327c2d7842f2fd1
10: 0x564633ebbec5 - cranelift_wasm::module_translator::translate_module::h63087b4361b145a6
11: 0x564633c981b3 - lucetc::compiler::Compiler::new::hee9cc55e9e22ebe4
12: 0x564633b88e5b - lucetc::Lucetc::shared_object_file::he485a969b90d920f
13: 0x564633b7add8 - lucetc::main::h7b276514f39cbe87
14: 0x564633b8e6e3 - std::rt::lang_start::{{closure}}::h20df7461734dbd8d
15: 0x564634169a53 - std::rt::lang_start_internal::{{closure}}::ha6cdc0674c227baf
at src/libstd/rt.rs:49
16: 0x564634169a53 - std::panicking::try::do_call::hcfcd808f74618614
at src/libstd/panicking.rs:296
17: 0x56463417ab5a - __rust_maybe_catch_panic
at src/libpanic_unwind/lib.rs:82
18: 0x56463416a61d - std::panicking::try::h28299215a9cbdc2e
at src/libstd/panicking.rs:275
19: 0x56463416a61d - std::panic::catch_unwind::h6d2adbec69dbd2ec
at src/libstd/panic.rs:394
20: 0x56463416a61d - std::rt::lang_start_internal::ha819bd148e81f2bd
at src/libstd/rt.rs:48
21: 0x564633b7b2c2 - main
22: 0x7fb5406bfb97 - __libc_start_main
23: 0x564633b7763a - _start
24: 0x0 - <unknown>
Feedback
In lucetc/src/module.rs:326, there is a call to panic!. Calling LucetcError
make maybe more sense based on global lucetc quality code.
BTW, this call to panic is not the only one in lucetc/src/module.rs
Thanks!
The code of that specific case is
(module
(type $0 (func (result i32)))
(type $1 (func (param i32) (result i32)))
(import "spectest" "table" (table $timport$0 10 20 funcref))
(elem (i32.const 1) $1 $2)
(export "call" (func $0))
(func $0 (; 0 ;) (type $1) (param $0 i32) (result i32)
(call_indirect (type $0)
(local.get $0)
)
)
(func $1 (; 1 ;) (type $0) (result i32)
(i32.const 11)
)
(func $2 (; 2 ;) (type $0) (result i32)
(i32.const 22)
)
)
Properly handling that one requires a minor change to cranelift.