From a09c08994f2b0f56c72b7bc9fb79a7b7009e0b32 Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Sun, 21 Apr 2019 08:57:21 -0700 Subject: [PATCH] sm: change location of apm:p check, fixes failure to launch older games --- stratosphere/sm/source/sm_registration.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/stratosphere/sm/source/sm_registration.cpp b/stratosphere/sm/source/sm_registration.cpp index 390686e26..eead4cc7d 100644 --- a/stratosphere/sm/source/sm_registration.cpp +++ b/stratosphere/sm/source/sm_registration.cpp @@ -95,15 +95,6 @@ Registration::Service *Registration::GetFreeService() { } bool Registration::IsValidForSac(u8 *sac, size_t sac_size, u64 service, bool is_host) { - /* In 8.0.0, Nintendo removed the service apm:p -- however, all homebrew attempts to get */ - /* a handle to this when calling appletInitialize(). Because hbl has access to all services, */ - /* This would return true, and homebrew would *wait forever* trying to get a handle to a service */ - /* that will never register. Thus, in the interest of not breaking every single piece of homebrew */ - /* we will provide a little first class help. */ - if (GetRuntimeFirmwareVersion() >= FirmwareVersion_800 && service == EncodeNameConstant("apm:p")) { - return false; - } - u8 cur_ctrl; u64 cur_service; u64 service_for_compare; @@ -310,6 +301,15 @@ Result Registration::GetServiceForPid(u64 pid, u64 service, Handle *out) { if (service_name_len != 8 && (service >> (8 * service_name_len))) { return ResultSmInvalidServiceName; } + + /* In 8.0.0, Nintendo removed the service apm:p -- however, all homebrew attempts to get */ + /* a handle to this when calling appletInitialize(). Because hbl has access to all services, */ + /* This would return true, and homebrew would *wait forever* trying to get a handle to a service */ + /* that will never register. Thus, in the interest of not breaking every single piece of homebrew */ + /* we will provide a little first class help. */ + if (GetRuntimeFirmwareVersion() >= FirmwareVersion_800 && service == EncodeNameConstant("apm:p")) { + return ResultSmNotAllowed; + } if (!IsInitialProcess(pid)) { Registration::Process *proc = GetProcessForPid(pid);