[lld] [lld][WebAssembly] Fix used of uninitialized stack data with -wasm64 (PR #107780)

Sam Clegg via llvm-commits llvm-commits at lists.llvm.org
Sun Sep 8 15:32:12 PDT 2024


https://github.com/sbc100 created https://github.com/llvm/llvm-project/pull/107780

In the case of `-wasm64` we were setting the type of the init expression to be 64-bit but were only setting the low 32-bits of the value (by assigning to Int32).

Fixes: https://github.com/emscripten-core/emscripten/issues/22538

>From c2dc65eedc72f2846a67da1f60557a19050600c3 Mon Sep 17 00:00:00 2001
From: Sam Clegg <sbc at chromium.org>
Date: Sun, 8 Sep 2024 15:28:37 -0700
Subject: [PATCH] [lld][WebAssembly] Fix used of uninitialized stack data with
 -wasm64

In the case of `-wasm64` we were setting the type of the init expression
to be 64-bit but were only setting the low 32-bits of the value (by
assigning to Int32).

Fixes: https://github.com/emscripten-core/emscripten/issues/22538
---
 lld/wasm/SyntheticSections.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/lld/wasm/SyntheticSections.cpp b/lld/wasm/SyntheticSections.cpp
index f02f55519a2512..72d08b849d8e86 100644
--- a/lld/wasm/SyntheticSections.cpp
+++ b/lld/wasm/SyntheticSections.cpp
@@ -587,8 +587,7 @@ void ElemSection::writeBody() {
     initExpr.Inst.Value.Global = WasmSym::tableBase->getGlobalIndex();
   } else {
     bool is64 = config->is64.value_or(false);
-    initExpr.Inst.Opcode = is64 ? WASM_OPCODE_I64_CONST : WASM_OPCODE_I32_CONST;
-    initExpr.Inst.Value.Int32 = config->tableBase;
+    initExpr = intConst(config->tableBase, is64);
   }
   writeInitExpr(os, initExpr);
 



More information about the llvm-commits mailing list