summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/svc.cpp
diff options
context:
space:
mode:
authorGravatar Lioncash2018-10-24 14:07:53 -0400
committerGravatar Lioncash2018-10-24 14:10:48 -0400
commit77328b0f1978f044f05a60cd864a4dff0c4b7493 (patch)
tree549f5c07cbb48a628dcf9a3f16a1afcf74b1f309 /src/core/hle/kernel/svc.cpp
parentkernel/error: Add error code for invalid pointers (diff)
downloadyuzu-77328b0f1978f044f05a60cd864a4dff0c4b7493.tar.gz
yuzu-77328b0f1978f044f05a60cd864a4dff0c4b7493.tar.xz
yuzu-77328b0f1978f044f05a60cd864a4dff0c4b7493.zip
kernel/svc: Move and correct returned error code for invalid thread priorities in SetThreadPriority()
All priority checks are supposed to occur before checking the validity of the thread handle, we're also not supposed to return ERR_NOT_AUTHORIZED here.
Diffstat (limited to 'src/core/hle/kernel/svc.cpp')
-rw-r--r--src/core/hle/kernel/svc.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp
index 9a783d524..e7e4c59b6 100644
--- a/src/core/hle/kernel/svc.cpp
+++ b/src/core/hle/kernel/svc.cpp
@@ -594,16 +594,17 @@ static ResultCode SetThreadPriority(Handle handle, u32 priority) {
594 } 594 }
595 595
596 const auto* const current_process = Core::CurrentProcess(); 596 const auto* const current_process = Core::CurrentProcess();
597 SharedPtr<Thread> thread = current_process->GetHandleTable().Get<Thread>(handle);
598 if (!thread) {
599 return ERR_INVALID_HANDLE;
600 }
601 597
602 // Note: The kernel uses the current process's resource limit instead of 598 // Note: The kernel uses the current process's resource limit instead of
603 // the one from the thread owner's resource limit. 599 // the one from the thread owner's resource limit.
604 const ResourceLimit& resource_limit = current_process->GetResourceLimit(); 600 const ResourceLimit& resource_limit = current_process->GetResourceLimit();
605 if (resource_limit.GetMaxResourceValue(ResourceType::Priority) > priority) { 601 if (resource_limit.GetMaxResourceValue(ResourceType::Priority) > priority) {
606 return ERR_NOT_AUTHORIZED; 602 return ERR_INVALID_THREAD_PRIORITY;
603 }
604
605 SharedPtr<Thread> thread = current_process->GetHandleTable().Get<Thread>(handle);
606 if (!thread) {
607 return ERR_INVALID_HANDLE;
607 } 608 }
608 609
609 thread->SetPriority(priority); 610 thread->SetPriority(priority);