diff --git a/Source/Tools/LinuxEmulation/LinuxSyscalls/SignalDelegator.cpp b/Source/Tools/LinuxEmulation/LinuxSyscalls/SignalDelegator.cpp index c3c435026a..96900a1e19 100644 --- a/Source/Tools/LinuxEmulation/LinuxSyscalls/SignalDelegator.cpp +++ b/Source/Tools/LinuxEmulation/LinuxSyscalls/SignalDelegator.cpp @@ -1471,9 +1471,16 @@ namespace FEX::HLE { else if (Signal == SIGSEGV && (reinterpret_cast(ArchHelpers::Context::GetPc(UContext)) == FaultSafeMemcpy::CopyFromUser_FaultLocation || reinterpret_cast(ArchHelpers::Context::GetPc(UContext)) == FaultSafeMemcpy::CopyToUser_FaultLocation)) { - // Jump to the copy fault handler return trampoline to safely return EFAULT. - ArchHelpers::Context::SetPc(UContext, reinterpret_cast(&FaultSafeMemcpy::CopyFaultTrampoline)); - return; + // If you want to emulate EFAULT behaviour then enable this if-statement. + // Do this once we find an application that depends on this. + if constexpr (false) { + // Jump to the copy fault handler return trampoline to safely return EFAULT. + ArchHelpers::Context::SetPc(UContext, reinterpret_cast(&FaultSafeMemcpy::CopyFaultTrampoline)); + return; + } + else { + LogMan::Msg::AFmt("Received invalid data to syscall. Crashing now!"); + } } else { if (IsAsyncSignal(&SigInfo, Signal) && MustDeferSignal) { diff --git a/unittests/FEXLinuxTests/tests/syscalls/syscalls_efault.cpp b/unittests/FEXLinuxTests/tests/syscalls/syscalls_efault.cpp index 45d559b2e0..2edf005a5c 100644 --- a/unittests/FEXLinuxTests/tests/syscalls/syscalls_efault.cpp +++ b/unittests/FEXLinuxTests/tests/syscalls/syscalls_efault.cpp @@ -15,7 +15,7 @@ TEST_CASE("poll") { CHECK(errno == EFAULT); } -TEST_CASE("ppoll") { +TEST_CASE("ppoll", "[!shouldfail]") { // ppoll can return EFAULT for arguements 1, 3, 4 struct pollfd *invalid_fds = reinterpret_cast(mmap(nullptr, sysconf(_SC_PAGESIZE), PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0)); struct timespec *invalid_timespec = reinterpret_cast(mmap(nullptr, sysconf(_SC_PAGESIZE), PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0));