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

Implement stack limiter #1946

Merged
merged 84 commits into from
Feb 29, 2024
Merged

Implement stack limiter #1946

merged 84 commits into from
Feb 29, 2024

Conversation

Harrm
Copy link
Contributor

@Harrm Harrm commented Jan 19, 2024

Referenced issues

Audit https://github.com/qdrvm/KAGOME-audit/issues/21

Description of the Change

Instrument the runtime code with a stack limiter to prevent stack overflow attacks. WebAssembly code is analyzed before being compiled, and a deterministic maximum stack depth is calculated for every function. Then, every function call is wrapped with a check that this function call will not exceed the global stack limit when called.

Please also have a look at paritytech/wasm-instrument#86

Benefits

Safer runtime calls.

Possible Drawbacks

Some performance toll.

Usage Examples or Tests

Provided in the code.

Alternate Designs

As we have to be compatible with substrate, hardly any. We could link to the same library the substrate uses.

@igor-egorov
Copy link
Contributor

Macos target currently cannot be built

FAILED: core/assets/CMakeFiles/assets.dir/embedded_chainspec.cpp.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DPRIVATE -DUSE_KAGOME_EMBEDDINGS -I/Users/igor/dev/kagome/core -std=c++20 -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk -gdwarf-4 -fdiagnostics-show-template-tree -Wall -Wextra -Woverloaded-virtual -Wformat=2 -Wmisleading-indentation -Wnull-dereference -Wdouble-promotion -Wsign-compare -Wtype-limits -Wno-unused-command-line-argument -Wno-unused-parameter -Wno-format-nonliteral -Wno-gnu-zero-variadic-macro-arguments -Werror=unused-lambda-capture -Werror=return-type -Werror=sign-compare -Werror=mismatched-tags -Werror=switch -MD -MT core/assets/CMakeFiles/assets.dir/embedded_chainspec.cpp.o -MF core/assets/CMakeFiles/assets.dir/embedded_chainspec.cpp.o.d -o core/assets/CMakeFiles/assets.dir/embedded_chainspec.cpp.o -c /Users/igor/dev/kagome/build/core/assets/embedded_chainspec.cpp
clang: error: no such file or directory: '/Users/igor/dev/kagome/build/core/assets/embedded_chainspec.cpp'
clang: error: no input files

option(CLEAR_OBJS "Clear object files" OFF)

if(NOT($ENV{CI}) OR NOT($ENV{GITHUB_ACTIONS}))
option(TESTING "Build and run test suite" ON)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

well, ok

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

?

@Harrm Harrm merged commit 771223a into master Feb 29, 2024
12 of 13 checks passed
@Harrm Harrm deleted the feature/stack-limiter branch February 29, 2024 13:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants