From 8f91d31b8b055bbece3f88b9d88cfe8c9cfc8133 Mon Sep 17 00:00:00 2001 From: SChernykh Date: Fri, 20 Oct 2023 09:04:35 +0200 Subject: [PATCH] Fixed UB in ARM64 JIT compiler Fixed unaligned memory writes --- src/jit_compiler_a64.cpp | 3 ++- src/jit_compiler_a64.hpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/jit_compiler_a64.cpp b/src/jit_compiler_a64.cpp index 0c55766..75ea8cc 100644 --- a/src/jit_compiler_a64.cpp +++ b/src/jit_compiler_a64.cpp @@ -709,7 +709,8 @@ void JitCompilerA64::h_IMUL_RCP(Instruction& instr, uint32_t& codePos) const uint32_t literal_id = (ImulRcpLiteralsEnd - literalPos) / sizeof(uint64_t); literalPos -= sizeof(uint64_t); - *(uint64_t*)(code + literalPos) = (q << shift) + ((r << shift) / divisor); + const uint64_t randomx_reciprocal = (q << shift) + ((r << shift) / divisor); + memcpy(code + literalPos, &randomx_reciprocal, sizeof(randomx_reciprocal)); if (literal_id < 12) { diff --git a/src/jit_compiler_a64.hpp b/src/jit_compiler_a64.hpp index a02824f..f8484c0 100644 --- a/src/jit_compiler_a64.hpp +++ b/src/jit_compiler_a64.hpp @@ -81,7 +81,7 @@ namespace randomx { static void emit64(uint64_t val, uint8_t* code, uint32_t& codePos) { - *(uint64_t*)(code + codePos) = val; + memcpy(code + codePos, &val, sizeof(val)); codePos += sizeof(val); }