diff options
author | bunnei <bunneidev@gmail.com> | 2018-09-18 20:25:00 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-18 20:25:00 +0200 |
commit | 733c47623b98d873b58ce796b672b7b3d4081b0c (patch) | |
tree | 73b76702c2e562a6bcc1ae8cdddf55129cddac34 | |
parent | Merge pull request #1344 from lioncash/arm (diff) | |
parent | kernel/mutex: Replace ResultCode construction for invalid addresses with the named variant (diff) | |
download | yuzu-733c47623b98d873b58ce796b672b7b3d4081b0c.tar yuzu-733c47623b98d873b58ce796b672b7b3d4081b0c.tar.gz yuzu-733c47623b98d873b58ce796b672b7b3d4081b0c.tar.bz2 yuzu-733c47623b98d873b58ce796b672b7b3d4081b0c.tar.lz yuzu-733c47623b98d873b58ce796b672b7b3d4081b0c.tar.xz yuzu-733c47623b98d873b58ce796b672b7b3d4081b0c.tar.zst yuzu-733c47623b98d873b58ce796b672b7b3d4081b0c.zip |
-rw-r--r-- | src/core/hle/kernel/mutex.cpp | 4 | ||||
-rw-r--r-- | src/core/hle/kernel/svc.cpp | 8 |
2 files changed, 10 insertions, 2 deletions
diff --git a/src/core/hle/kernel/mutex.cpp b/src/core/hle/kernel/mutex.cpp index 36bf0b677..51f4544be 100644 --- a/src/core/hle/kernel/mutex.cpp +++ b/src/core/hle/kernel/mutex.cpp @@ -62,7 +62,7 @@ ResultCode Mutex::TryAcquire(HandleTable& handle_table, VAddr address, Handle ho Handle requesting_thread_handle) { // The mutex address must be 4-byte aligned if ((address % sizeof(u32)) != 0) { - return ResultCode(ErrorModule::Kernel, ErrCodes::InvalidAddress); + return ERR_INVALID_ADDRESS; } SharedPtr<Thread> holding_thread = handle_table.Get<Thread>(holding_thread_handle); @@ -100,7 +100,7 @@ ResultCode Mutex::TryAcquire(HandleTable& handle_table, VAddr address, Handle ho ResultCode Mutex::Release(VAddr address) { // The mutex address must be 4-byte aligned if ((address % sizeof(u32)) != 0) { - return ResultCode(ErrorModule::Kernel, ErrCodes::InvalidAddress); + return ERR_INVALID_ADDRESS; } auto [thread, num_waiters] = GetHighestPriorityMutexWaitingThread(GetCurrentThread(), address); diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index c5c1697ee..371fc439e 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp @@ -280,6 +280,10 @@ static ResultCode ArbitrateLock(Handle holding_thread_handle, VAddr mutex_addr, "requesting_current_thread_handle=0x{:08X}", holding_thread_handle, mutex_addr, requesting_thread_handle); + if (Memory::IsKernelVirtualAddress(mutex_addr)) { + return ERR_INVALID_ADDRESS_STATE; + } + auto& handle_table = Core::System::GetInstance().Kernel().HandleTable(); return Mutex::TryAcquire(handle_table, mutex_addr, holding_thread_handle, requesting_thread_handle); @@ -289,6 +293,10 @@ static ResultCode ArbitrateLock(Handle holding_thread_handle, VAddr mutex_addr, static ResultCode ArbitrateUnlock(VAddr mutex_addr) { LOG_TRACE(Kernel_SVC, "called mutex_addr=0x{:X}", mutex_addr); + if (Memory::IsKernelVirtualAddress(mutex_addr)) { + return ERR_INVALID_ADDRESS_STATE; + } + return Mutex::Release(mutex_addr); } |