sm: Use result definitions instead of magic numbers

This commit is contained in:
Michael Scire 2019-03-28 15:28:36 -07:00
parent 696f66f620
commit b940f61d42
3 changed files with 49 additions and 49 deletions

@ -1 +1 @@
Subproject commit cd7f81f7b07a832258a7a8c4a39f1680f98bbecc Subproject commit aab4aedb34e5029101ee15c238ead6167aaa4afa

View file

@ -188,17 +188,17 @@ u64 Registration::GetInitialProcessId() {
/* Process management. */ /* Process management. */
Result Registration::RegisterProcess(u64 pid, u8 *acid_sac, size_t acid_sac_size, u8 *aci0_sac, size_t aci0_sac_size) { Result Registration::RegisterProcess(u64 pid, u8 *acid_sac, size_t acid_sac_size, u8 *aci0_sac, size_t aci0_sac_size) {
Registration::Process *proc = GetFreeProcess();
if (aci0_sac_size > REGISTRATION_MAX_SAC_SIZE) { if (aci0_sac_size > REGISTRATION_MAX_SAC_SIZE) {
return 0x1215; return ResultSmTooLargeAccessControl;
} }
Registration::Process *proc = GetFreeProcess();
if (proc == NULL) { if (proc == NULL) {
return 0x215; return ResultSmInsufficientProcesses;
} }
if (aci0_sac_size && !ValidateSacAgainstRestriction(acid_sac, acid_sac_size, aci0_sac, aci0_sac_size)) { if (aci0_sac_size && !ValidateSacAgainstRestriction(acid_sac, acid_sac_size, aci0_sac, aci0_sac_size)) {
return 0x1015; return ResultSmNotAllowed;
} }
proc->pid = pid; proc->pid = pid;
@ -210,7 +210,7 @@ Result Registration::RegisterProcess(u64 pid, u8 *acid_sac, size_t acid_sac_size
Result Registration::UnregisterProcess(u64 pid) { Result Registration::UnregisterProcess(u64 pid) {
Registration::Process *proc = GetProcessForPid(pid); Registration::Process *proc = GetProcessForPid(pid);
if (proc == NULL) { if (proc == NULL) {
return 0x415; return ResultSmInvalidClient;
} }
proc->pid = 0; proc->pid = 0;
@ -283,7 +283,7 @@ Result Registration::GetServiceHandle(u64 pid, u64 service, Handle *out) {
} }
if (R_FAILED(rc)) { if (R_FAILED(rc)) {
if ((rc & 0x3FFFFF) == 0xE01) { if ((rc & 0x3FFFFF) == 0xE01) {
return 0x615; return ResultSmInsufficientSessions;
} }
} }
@ -292,24 +292,24 @@ Result Registration::GetServiceHandle(u64 pid, u64 service, Handle *out) {
Result Registration::GetServiceForPid(u64 pid, u64 service, Handle *out) { Result Registration::GetServiceForPid(u64 pid, u64 service, Handle *out) {
if (!service) { if (!service) {
return 0xC15; return ResultSmInvalidServiceName;
} }
u64 service_name_len = GetServiceNameLength(service); u64 service_name_len = GetServiceNameLength(service);
/* If the service has bytes after a null terminator, that's no good. */ /* If the service has bytes after a null terminator, that's no good. */
if (service_name_len != 8 && (service >> (8 * service_name_len))) { if (service_name_len != 8 && (service >> (8 * service_name_len))) {
return 0xC15; return ResultSmInvalidServiceName;
} }
if (!IsInitialProcess(pid)) { if (!IsInitialProcess(pid)) {
Registration::Process *proc = GetProcessForPid(pid); Registration::Process *proc = GetProcessForPid(pid);
if (proc == NULL) { if (proc == NULL) {
return 0x415; return ResultSmInvalidClient;
} }
if (!IsValidForSac(proc->sac, proc->sac_size, service, false)) { if (!IsValidForSac(proc->sac, proc->sac_size, service, false)) {
return 0x1015; return ResultSmNotAllowed;
} }
} }
@ -318,29 +318,29 @@ Result Registration::GetServiceForPid(u64 pid, u64 service, Handle *out) {
Result Registration::RegisterServiceForPid(u64 pid, u64 service, u64 max_sessions, bool is_light, Handle *out) { Result Registration::RegisterServiceForPid(u64 pid, u64 service, u64 max_sessions, bool is_light, Handle *out) {
if (!service) { if (!service) {
return 0xC15; return ResultSmInvalidServiceName;
} }
u64 service_name_len = GetServiceNameLength(service); u64 service_name_len = GetServiceNameLength(service);
/* If the service has bytes after a null terminator, that's no good. */ /* If the service has bytes after a null terminator, that's no good. */
if (service_name_len != 8 && (service >> (8 * service_name_len))) { if (service_name_len != 8 && (service >> (8 * service_name_len))) {
return 0xC15; return ResultSmInvalidServiceName;
} }
if (!IsInitialProcess(pid)) { if (!IsInitialProcess(pid)) {
Registration::Process *proc = GetProcessForPid(pid); Registration::Process *proc = GetProcessForPid(pid);
if (proc == NULL) { if (proc == NULL) {
return 0x415; return ResultSmInvalidClient;
} }
if (!IsValidForSac(proc->sac, proc->sac_size, service, true)) { if (!IsValidForSac(proc->sac, proc->sac_size, service, true)) {
return 0x1015; return ResultSmNotAllowed;
} }
} }
if (HasService(service)) { if (HasService(service)) {
return 0x815; return ResultSmAlreadyRegistered;
} }
#ifdef SM_MINIMUM_SESSION_LIMIT #ifdef SM_MINIMUM_SESSION_LIMIT
@ -351,7 +351,7 @@ Result Registration::RegisterServiceForPid(u64 pid, u64 service, u64 max_session
Registration::Service *free_service = GetFreeService(); Registration::Service *free_service = GetFreeService();
if (free_service == NULL) { if (free_service == NULL) {
return 0xA15; return ResultSmInsufficientServices;
} }
*out = 0; *out = 0;
@ -379,11 +379,11 @@ Result Registration::RegisterServiceForSelf(u64 service, u64 max_sessions, bool
/* If the service has bytes after a null terminator, that's no good. */ /* If the service has bytes after a null terminator, that's no good. */
if (service_name_len != 8 && (service >> (8 * service_name_len))) { if (service_name_len != 8 && (service >> (8 * service_name_len))) {
return 0xC15; return ResultSmInvalidServiceName;
} }
if (HasService(service)) { if (HasService(service)) {
return 0x815; return ResultSmAlreadyRegistered;
} }
#ifdef SM_MINIMUM_SESSION_LIMIT #ifdef SM_MINIMUM_SESSION_LIMIT
@ -394,7 +394,7 @@ Result Registration::RegisterServiceForSelf(u64 service, u64 max_sessions, bool
Registration::Service *free_service = GetFreeService(); Registration::Service *free_service = GetFreeService();
if (free_service == NULL) { if (free_service == NULL) {
return 0xA15; return ResultSmInsufficientServices;
} }
*out = 0; *out = 0;
@ -413,23 +413,23 @@ Result Registration::RegisterServiceForSelf(u64 service, u64 max_sessions, bool
Result Registration::UnregisterServiceForPid(u64 pid, u64 service) { Result Registration::UnregisterServiceForPid(u64 pid, u64 service) {
if (!service) { if (!service) {
return 0xC15; return ResultSmInvalidServiceName;
} }
u64 service_name_len = GetServiceNameLength(service); u64 service_name_len = GetServiceNameLength(service);
/* If the service has bytes after a null terminator, that's no good. */ /* If the service has bytes after a null terminator, that's no good. */
if (service_name_len != 8 && (service >> (8 * service_name_len))) { if (service_name_len != 8 && (service >> (8 * service_name_len))) {
return 0xC15; return ResultSmInvalidServiceName;
} }
Registration::Service *target_service = GetService(service); Registration::Service *target_service = GetService(service);
if (target_service == NULL) { if (target_service == NULL) {
return 0xE15; return ResultSmNotRegistered;
} }
if (!IsInitialProcess(pid) && target_service->owner_pid != pid) { if (!IsInitialProcess(pid) && target_service->owner_pid != pid) {
return 0x1015; return ResultSmNotAllowed;
} }
svcCloseHandle(target_service->port_h); svcCloseHandle(target_service->port_h);
@ -442,25 +442,25 @@ Result Registration::UnregisterServiceForPid(u64 pid, u64 service) {
Result Registration::InstallMitmForPid(u64 pid, u64 service, Handle *out, Handle *query_out) { Result Registration::InstallMitmForPid(u64 pid, u64 service, Handle *out, Handle *query_out) {
if (!service) { if (!service) {
return 0xC15; return ResultSmInvalidServiceName;
} }
u64 service_name_len = GetServiceNameLength(service); u64 service_name_len = GetServiceNameLength(service);
/* If the service has bytes after a null terminator, that's no good. */ /* If the service has bytes after a null terminator, that's no good. */
if (service_name_len != 8 && (service >> (8 * service_name_len))) { if (service_name_len != 8 && (service >> (8 * service_name_len))) {
return 0xC15; return ResultSmInvalidServiceName;
} }
/* Verify we're allowed to mitm the service. */ /* Verify we're allowed to mitm the service. */
if (!IsInitialProcess(pid)) { if (!IsInitialProcess(pid)) {
Registration::Process *proc = GetProcessForPid(pid); Registration::Process *proc = GetProcessForPid(pid);
if (proc == NULL) { if (proc == NULL) {
return 0x415; return ResultSmInvalidClient;
} }
if (!IsValidForSac(proc->sac, proc->sac_size, service, true)) { if (!IsValidForSac(proc->sac, proc->sac_size, service, true)) {
return 0x1015; return ResultSmNotAllowed;
} }
} }
@ -472,7 +472,7 @@ Result Registration::InstallMitmForPid(u64 pid, u64 service, Handle *out, Handle
/* Verify the service isn't already being mitm'd. */ /* Verify the service isn't already being mitm'd. */
if (target_service->mitm_pid != 0) { if (target_service->mitm_pid != 0) {
return 0x815; return ResultSmAlreadyRegistered;
} }
*out = 0; *out = 0;
@ -488,23 +488,23 @@ Result Registration::InstallMitmForPid(u64 pid, u64 service, Handle *out, Handle
Result Registration::UninstallMitmForPid(u64 pid, u64 service) { Result Registration::UninstallMitmForPid(u64 pid, u64 service) {
if (!service) { if (!service) {
return 0xC15; return ResultSmInvalidServiceName;
} }
u64 service_name_len = GetServiceNameLength(service); u64 service_name_len = GetServiceNameLength(service);
/* If the service has bytes after a null terminator, that's no good. */ /* If the service has bytes after a null terminator, that's no good. */
if (service_name_len != 8 && (service >> (8 * service_name_len))) { if (service_name_len != 8 && (service >> (8 * service_name_len))) {
return 0xC15; return ResultSmInvalidServiceName;
} }
Registration::Service *target_service = GetService(service); Registration::Service *target_service = GetService(service);
if (target_service == NULL) { if (target_service == NULL) {
return 0xE15; return ResultSmNotRegistered;
} }
if (!IsInitialProcess(pid) && target_service->mitm_pid != pid) { if (!IsInitialProcess(pid) && target_service->mitm_pid != pid) {
return 0x1015; return ResultSmNotAllowed;
} }
svcCloseHandle(target_service->mitm_port_h); svcCloseHandle(target_service->mitm_port_h);
@ -515,23 +515,23 @@ Result Registration::UninstallMitmForPid(u64 pid, u64 service) {
Result Registration::AcknowledgeMitmSessionForPid(u64 pid, u64 service, Handle *out, u64 *out_pid) { Result Registration::AcknowledgeMitmSessionForPid(u64 pid, u64 service, Handle *out, u64 *out_pid) {
if (!service) { if (!service) {
return 0xC15; return ResultSmInvalidServiceName;
} }
u64 service_name_len = GetServiceNameLength(service); u64 service_name_len = GetServiceNameLength(service);
/* If the service has bytes after a null terminator, that's no good. */ /* If the service has bytes after a null terminator, that's no good. */
if (service_name_len != 8 && (service >> (8 * service_name_len))) { if (service_name_len != 8 && (service >> (8 * service_name_len))) {
return 0xC15; return ResultSmInvalidServiceName;
} }
Registration::Service *target_service = GetService(service); Registration::Service *target_service = GetService(service);
if (target_service == NULL) { if (target_service == NULL) {
return 0xE15; return ResultSmNotRegistered;
} }
if ((!IsInitialProcess(pid) && target_service->mitm_pid != pid) || !target_service->mitm_waiting_ack) { if ((!IsInitialProcess(pid) && target_service->mitm_pid != pid) || !target_service->mitm_waiting_ack) {
return 0x1015; return ResultSmNotAllowed;
} }
*out = target_service->mitm_fwd_sess_h; *out = target_service->mitm_fwd_sess_h;
@ -575,19 +575,19 @@ void Registration::ConvertServiceToRecord(Registration::Service *service, SmServ
Result Registration::GetServiceRecord(u64 service, SmServiceRecord *out) { Result Registration::GetServiceRecord(u64 service, SmServiceRecord *out) {
if (!service) { if (!service) {
return 0xC15; return ResultSmInvalidServiceName;
} }
u64 service_name_len = GetServiceNameLength(service); u64 service_name_len = GetServiceNameLength(service);
/* If the service has bytes after a null terminator, that's no good. */ /* If the service has bytes after a null terminator, that's no good. */
if (service_name_len != 8 && (service >> (8 * service_name_len))) { if (service_name_len != 8 && (service >> (8 * service_name_len))) {
return 0xC15; return ResultSmInvalidServiceName;
} }
Registration::Service *target_service = GetService(service); Registration::Service *target_service = GetService(service);
if (target_service == NULL) { if (target_service == NULL) {
return 0xE15; return ResultSmNotRegistered;
} }
ConvertServiceToRecord(target_service, out); ConvertServiceToRecord(target_service, out);

View file

@ -27,7 +27,7 @@ Result UserService::Initialize(PidDescriptor pid) {
Result UserService::GetService(Out<MovedHandle> out_h, SmServiceName service) { Result UserService::GetService(Out<MovedHandle> out_h, SmServiceName service) {
Handle session_h = 0; Handle session_h = 0;
Result rc = 0x415; Result rc = ResultSmInvalidClient;
#ifdef SM_ENABLE_SMHAX #ifdef SM_ENABLE_SMHAX
if (!this->has_initialized) { if (!this->has_initialized) {
@ -46,7 +46,7 @@ Result UserService::GetService(Out<MovedHandle> out_h, SmServiceName service) {
Result UserService::RegisterService(Out<MovedHandle> out_h, SmServiceName service, u32 max_sessions, bool is_light) { Result UserService::RegisterService(Out<MovedHandle> out_h, SmServiceName service, u32 max_sessions, bool is_light) {
Handle service_h = 0; Handle service_h = 0;
Result rc = 0x415; Result rc = ResultSmInvalidClient;
#ifdef SM_ENABLE_SMHAX #ifdef SM_ENABLE_SMHAX
if (!this->has_initialized) { if (!this->has_initialized) {
rc = Registration::RegisterServiceForPid(Registration::GetInitialProcessId(), smEncodeName(service.name), max_sessions, (is_light & 1) != 0, &service_h); rc = Registration::RegisterServiceForPid(Registration::GetInitialProcessId(), smEncodeName(service.name), max_sessions, (is_light & 1) != 0, &service_h);
@ -63,7 +63,7 @@ Result UserService::RegisterService(Out<MovedHandle> out_h, SmServiceName servic
} }
Result UserService::UnregisterService(SmServiceName service) { Result UserService::UnregisterService(SmServiceName service) {
Result rc = 0x415; Result rc = ResultSmInvalidClient;
#ifdef SM_ENABLE_SMHAX #ifdef SM_ENABLE_SMHAX
if (!this->has_initialized) { if (!this->has_initialized) {
rc = Registration::UnregisterServiceForPid(Registration::GetInitialProcessId(), smEncodeName(service.name)); rc = Registration::UnregisterServiceForPid(Registration::GetInitialProcessId(), smEncodeName(service.name));
@ -78,7 +78,7 @@ Result UserService::UnregisterService(SmServiceName service) {
Result UserService::AtmosphereInstallMitm(Out<MovedHandle> srv_h, Out<MovedHandle> qry_h, SmServiceName service) { Result UserService::AtmosphereInstallMitm(Out<MovedHandle> srv_h, Out<MovedHandle> qry_h, SmServiceName service) {
Handle service_h = 0; Handle service_h = 0;
Handle query_h = 0; Handle query_h = 0;
Result rc = 0x415; Result rc = ResultSmInvalidClient;
if (this->has_initialized) { if (this->has_initialized) {
rc = Registration::InstallMitmForPid(this->pid, smEncodeName(service.name), &service_h, &query_h); rc = Registration::InstallMitmForPid(this->pid, smEncodeName(service.name), &service_h, &query_h);
} }
@ -91,7 +91,7 @@ Result UserService::AtmosphereInstallMitm(Out<MovedHandle> srv_h, Out<MovedHandl
} }
Result UserService::AtmosphereUninstallMitm(SmServiceName service) { Result UserService::AtmosphereUninstallMitm(SmServiceName service) {
Result rc = 0x415; Result rc = ResultSmInvalidClient;
if (this->has_initialized) { if (this->has_initialized) {
rc = Registration::UninstallMitmForPid(this->pid, smEncodeName(service.name)); rc = Registration::UninstallMitmForPid(this->pid, smEncodeName(service.name));
} }
@ -99,7 +99,7 @@ Result UserService::AtmosphereUninstallMitm(SmServiceName service) {
} }
Result UserService::AtmosphereAcknowledgeMitmSession(Out<u64> client_pid, Out<MovedHandle> fwd_h, SmServiceName service) { Result UserService::AtmosphereAcknowledgeMitmSession(Out<u64> client_pid, Out<MovedHandle> fwd_h, SmServiceName service) {
Result rc = 0x415; Result rc = ResultSmInvalidClient;
Handle out_fwd_h = 0; Handle out_fwd_h = 0;
if (this->has_initialized) { if (this->has_initialized) {
rc = Registration::AcknowledgeMitmSessionForPid(this->pid, smEncodeName(service.name), &out_fwd_h, client_pid.GetPointer()); rc = Registration::AcknowledgeMitmSessionForPid(this->pid, smEncodeName(service.name), &out_fwd_h, client_pid.GetPointer());
@ -113,10 +113,10 @@ Result UserService::AtmosphereAcknowledgeMitmSession(Out<u64> client_pid, Out<Mo
} }
Result UserService::AtmosphereAssociatePidTidForMitm(u64 pid, u64 tid) { Result UserService::AtmosphereAssociatePidTidForMitm(u64 pid, u64 tid) {
Result rc = 0x415; Result rc = ResultSmInvalidClient;
if (this->has_initialized) { if (this->has_initialized) {
if (Registration::IsInitialProcess(pid)) { if (Registration::IsInitialProcess(pid)) {
rc = 0x1015; rc = ResultSmNotAllowed;
} else { } else {
rc = Registration::AssociatePidTidForMitm(pid, tid); rc = Registration::AssociatePidTidForMitm(pid, tid);
} }