From c159a1464000d8e05bf826fd50af0ef25a3bc6cb Mon Sep 17 00:00:00 2001 From: Justin Michaud Date: Wed, 1 Feb 2023 13:49:14 -0800 Subject: [PATCH] Cherry-pick 259548.25@safari-7615-branch (1a20160f826c). rdar://104692168 Locals should update max stack size rdar://104692168 Reviewed by Yusuke Suzuki. We can forget to update the max stack size, causing an OOB stack read in OSR entry. This only happens if you create a bunch of locals and never push anything to the stack, so it should be very rare and difficult to abuse. * JSTests/wasm/stress/many-locals-small-wasm-stack.js: Added. (async let): * JSTests/wasm/stress/many-locals-small-wasm-stack.wasm: Added. * JSTests/wasm/stress/many-locals-small-wasm-stack.wat: Added. * Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp: (JSC::Wasm::LLIntGenerator::addLocal): Canonical link: https://commits.webkit.org/259548.25@safari-7615-branch --- .../wasm/stress/many-locals-small-wasm-stack.js | 8 ++++++++ .../wasm/stress/many-locals-small-wasm-stack.wasm | Bin 0 -> 71 bytes .../wasm/stress/many-locals-small-wasm-stack.wat | 9 +++++++++ Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp | 2 ++ 4 files changed, 19 insertions(+) create mode 100644 JSTests/wasm/stress/many-locals-small-wasm-stack.js create mode 100644 JSTests/wasm/stress/many-locals-small-wasm-stack.wasm create mode 100644 JSTests/wasm/stress/many-locals-small-wasm-stack.wat diff --git a/JSTests/wasm/stress/many-locals-small-wasm-stack.js b/JSTests/wasm/stress/many-locals-small-wasm-stack.js new file mode 100644 index 000000000000..c294d712fc24 --- /dev/null +++ b/JSTests/wasm/stress/many-locals-small-wasm-stack.js @@ -0,0 +1,8 @@ +//@ skip +// This is an infinite loop, so untill watchdog works we have to skip it. +(async function () { + let bytes = readFile('many-locals-small-wasm-stack.wasm', 'binary'); + let importObject = { }; + let i = await WebAssembly.instantiate(bytes, importObject); + i.instance.exports.main(0n, 0); +})(); diff --git a/JSTests/wasm/stress/many-locals-small-wasm-stack.wasm b/JSTests/wasm/stress/many-locals-small-wasm-stack.wasm new file mode 100644 index 0000000000000000000000000000000000000000..7287e941884cea78dc26b2fa15c0c59dd0475b5f GIT binary patch literal 71 zcmWN_K@NZ*3 PartialResult m_uninitializedLocals.append(push(NoConsistencyCheck)); } else m_stackSize += count; + if (m_maxStackSize < m_stackSize) + m_maxStackSize = m_stackSize; return { }; }