From 2445739c0e7ee2cda9a8f1de80b0b4cc80dcc903 Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Wed, 20 Sep 2023 17:25:09 +0200 Subject: [PATCH] arm,arm64 rec: check fault location before attempting to rewrite Ignore fault if pc isn't in the dynarec code buffer. Fix for MINIDUMP-1S0, MINIDUMP-1RS --- core/rec-ARM/rec_arm.cpp | 3 +++ core/rec-ARM64/rec_arm64.cpp | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/core/rec-ARM/rec_arm.cpp b/core/rec-ARM/rec_arm.cpp index 5fc052852..edd80b625 100644 --- a/core/rec-ARM/rec_arm.cpp +++ b/core/rec-ARM/rec_arm.cpp @@ -778,6 +778,9 @@ bool Arm32Dynarec::rewrite(host_context_t& context, void *faultAddress) u32 full; }; + if ((u8 *)context.pc < (u8 *)codeBuffer->getBase() + || (u8 *)context.pc >= (u8 *)codeBuffer->getBase() + codeBuffer->getSize()) + return false; u32 *regs = context.reg; arm_mem_op *ptr = (arm_mem_op *)context.pc; diff --git a/core/rec-ARM64/rec_arm64.cpp b/core/rec-ARM64/rec_arm64.cpp index b80268ec5..93ad61c74 100644 --- a/core/rec-ARM64/rec_arm64.cpp +++ b/core/rec-ARM64/rec_arm64.cpp @@ -2313,9 +2313,12 @@ public: 8, }; - jitWriteProtect(*codeBuffer, false); //LOGI("Sh4Dynarec::rewrite pc %zx\n", context.pc); u32 *code_ptr = (u32 *)CC_RX2RW(context.pc); + if ((u8 *)code_ptr < (u8 *)codeBuffer->getBase() + || (u8 *)code_ptr >= (u8 *)codeBuffer->getBase() + codeBuffer->getSize()) + return false; + jitWriteProtect(*codeBuffer, false); u32 armv8_op = *code_ptr; bool is_read = false; u32 size = 0;