x64/Signals: Add EFAULT checks

This commit is contained in:
Ryan Houdek 2024-08-25 02:03:44 -07:00
parent 7a490a3811
commit 3459369c6e
No known key found for this signature in database

View File

@ -25,6 +25,8 @@ void RegisterSignals(FEX::HLE::SyscallHandler* Handler) {
if (sigsetsize != 8) {
return -EINVAL;
}
FaultSafeUserMemAccess::VerifyIsReadableOrNull(act, sizeof(GuestSigAction));
FaultSafeUserMemAccess::VerifyIsWritableOrNull(oldact, sizeof(GuestSigAction));
return FEX::HLE::_SyscallHandler->GetSignalDelegator()->RegisterGuestSignalHandler(signum, act, oldact);
});
@ -32,6 +34,9 @@ void RegisterSignals(FEX::HLE::SyscallHandler* Handler) {
REGISTER_SYSCALL_IMPL_X64(
rt_sigtimedwait,
[](FEXCore::Core::CpuStateFrame* Frame, uint64_t* set, siginfo_t* info, const struct timespec* timeout, size_t sigsetsize) -> uint64_t {
FaultSafeUserMemAccess::VerifyIsReadable(set, sizeof(sigsetsize));
FaultSafeUserMemAccess::VerifyIsWritableOrNull(info, sizeof(siginfo_t));
FaultSafeUserMemAccess::VerifyIsReadableOrNull(timeout, sizeof(timespec));
return FEX::HLE::_SyscallHandler->GetSignalDelegator()->GuestSigTimedWait(set, info, timeout, sigsetsize);
});
}