diff options
| author | Xavier Del Campo Romero <xavi92@disroot.org> | 2025-11-15 18:50:55 +0100 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi92@disroot.org> | 2025-11-15 18:50:55 +0100 |
| commit | b1034b86023672e6750da49b01a7d429cd8339d0 (patch) | |
| tree | 6147dac325b2bb062bfb35e0aa09d81f7e5758fe /src/interp/linear/check.c | |
| parent | 0b2a1fd9439d5ab1cdc076d7b9f1e763c4900b74 (diff) | |
| download | nanowasm-b1034b86023672e6750da49b01a7d429cd8339d0.tar.gz | |
Check memory linear accesses are within bounds
WebAssembly defines how many pages of linear memory are owned by the
instance on startup. This limit can then be bumped via the grow_memory
operator.
Therefore, accesses outside the defined bounds are considered an
exception.
Diffstat (limited to 'src/interp/linear/check.c')
| -rw-r--r-- | src/interp/linear/check.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/interp/linear/check.c b/src/interp/linear/check.c new file mode 100644 index 0000000..f2bea9a --- /dev/null +++ b/src/interp/linear/check.c @@ -0,0 +1,23 @@ +/* + * nanowasm, a tiny WebAssembly/Wasm interpreter + * Copyright (C) 2023-2025 Xavier Del Campo Romero + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. + */ + +#include <nanowasm/nw.h> +#include <nanowasm/linear.h> +#include <nw/interp.h> +#include <nw/mem.h> +#include <nw/log.h> + +int nwp_linear_check(const struct nw_interp *const i, + const unsigned long offset, const size_t n) +{ + const unsigned long pagesize = 64lu << 10lu, + end = i->linear.n_pages * pagesize; + + return offset >= end || n > end || offset >= end - n; +} |
