Procházet zdrojové kódy

Merge pull request #282 from SChernykh/fix-ub

Fixed UB in ARM64 JIT compiler
SChernykh před 2 roky
rodič
revize
5fc512e71c
2 změnil soubory, kde provedl 3 přidání a 2 odebrání
  1. 2 1
      src/jit_compiler_a64.cpp
  2. 1 1
      src/jit_compiler_a64.hpp

+ 2 - 1
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)
 	{

+ 1 - 1
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);
 		}