[wasm] Fix check for committing over the global limit

If we generate more code than allowed by the --wasm-max-code-space flag,
the {WasmCodeManager::Commit} method will fail (via fatal error). The
DCHECK that was placed before that call checked for a related condition
though, and failed before the {Commit} method could fail.
By moving it after the call, we fix this issue.

Adding a test case for this seems to be involved, since that test would
crash the whole process (because of the fatal error). So it would have
to be a unittest such that we can use ASSERT_DEATH_IF_SUPPORTED. In
unittests though we don't yet have the infrastructure to create a
NativeModule (needed for the WasmCodeAllocator). Alternatively we could
add special testing methods (and a constructor) to the
WasmCodeAllocator, but I do not consider this worth the effort for this
little fix.

R=thibaudm@chromium.org

Bug: chromium:1124646
Change-Id: Ief09dfbd0a5b0b040fe9cf8a34e458d1d01dfacc
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2390754
Auto-Submit: Clemens Backes <clemensb@chromium.org>
Commit-Queue: Thibaud Michaud <thibaudm@chromium.org>
Reviewed-by: Thibaud Michaud <thibaudm@chromium.org>
Cr-Commit-Position: refs/heads/master@{#69723}
This commit is contained in:
Clemens Backes 2020-09-06 18:28:59 +02:00 committed by Commit Bot
parent 56a54c0f45
commit 1a3cc6432d

View File

@ -669,13 +669,13 @@ Vector<byte> WasmCodeAllocator::AllocateForCodeInRegion(
// start is already committed (or we start at the beginning of a page).
// The end needs to be committed all through the end of the page.
if (commit_start < commit_end) {
committed_code_space_.fetch_add(commit_end - commit_start);
// Committed code cannot grow bigger than maximum code space size.
DCHECK_LE(committed_code_space_.load(), FLAG_wasm_max_code_space * MB);
for (base::AddressRegion split_range : SplitRangeByReservationsIfNeeded(
{commit_start, commit_end - commit_start}, owned_code_space_)) {
code_manager_->Commit(split_range);
}
committed_code_space_.fetch_add(commit_end - commit_start);
// Committed code cannot grow bigger than maximum code space size.
DCHECK_LE(committed_code_space_.load(), FLAG_wasm_max_code_space * MB);
}
DCHECK(IsAligned(code_space.begin(), kCodeAlignment));
allocated_code_space_.Merge(code_space);