[Kernel] added more checks to filter user_index out of range

This commit is contained in:
Cancerous 2019-12-22 21:29:19 -05:00 committed by illusion98
parent 600d750d95
commit d90cc3a7e9
2 changed files with 24 additions and 4 deletions

View File

@ -30,6 +30,10 @@ X_RESULT InputSystem::GetCapabilities(uint32_t user_index, uint32_t flags,
X_INPUT_CAPABILITIES* out_caps) { X_INPUT_CAPABILITIES* out_caps) {
SCOPE_profile_cpu_f("hid"); SCOPE_profile_cpu_f("hid");
if (user_index && user_index != 0xFF) {
return X_ERROR_NO_SUCH_USER;
}
bool any_connected = false; bool any_connected = false;
for (auto& driver : drivers_) { for (auto& driver : drivers_) {
X_RESULT result = driver->GetCapabilities(user_index, flags, out_caps); X_RESULT result = driver->GetCapabilities(user_index, flags, out_caps);
@ -45,6 +49,10 @@ X_RESULT InputSystem::GetCapabilities(uint32_t user_index, uint32_t flags,
X_RESULT InputSystem::GetState(uint32_t user_index, X_INPUT_STATE* out_state) { X_RESULT InputSystem::GetState(uint32_t user_index, X_INPUT_STATE* out_state) {
SCOPE_profile_cpu_f("hid"); SCOPE_profile_cpu_f("hid");
if (user_index && user_index != 0xFF) {
return X_ERROR_NO_SUCH_USER;
}
bool any_connected = false; bool any_connected = false;
for (auto& driver : drivers_) { for (auto& driver : drivers_) {
@ -62,6 +70,10 @@ X_RESULT InputSystem::GetState(uint32_t user_index, X_INPUT_STATE* out_state) {
X_RESULT InputSystem::SetState(uint32_t user_index, X_RESULT InputSystem::SetState(uint32_t user_index,
X_INPUT_VIBRATION* vibration) { X_INPUT_VIBRATION* vibration) {
SCOPE_profile_cpu_f("hid"); SCOPE_profile_cpu_f("hid");
if (user_index && user_index != 0xFF) {
return X_ERROR_NO_SUCH_USER;
}
bool any_connected = false; bool any_connected = false;
for (auto& driver : drivers_) { for (auto& driver : drivers_) {
@ -79,6 +91,10 @@ X_RESULT InputSystem::SetState(uint32_t user_index,
X_RESULT InputSystem::GetKeystroke(uint32_t user_index, uint32_t flags, X_RESULT InputSystem::GetKeystroke(uint32_t user_index, uint32_t flags,
X_INPUT_KEYSTROKE* out_keystroke) { X_INPUT_KEYSTROKE* out_keystroke) {
SCOPE_profile_cpu_f("hid"); SCOPE_profile_cpu_f("hid");
if (user_index && user_index != 0xFF) {
return X_ERROR_NO_SUCH_USER;
}
bool any_connected = false; bool any_connected = false;
for (auto& driver : drivers_) { for (auto& driver : drivers_) {

View File

@ -105,7 +105,7 @@ DECLARE_XAM_EXPORT1(XamProfileEnumerate, kUserProfiles, kImplemented);
X_HRESULT_result_t XamUserGetXUID(dword_t user_index, dword_t unk, X_HRESULT_result_t XamUserGetXUID(dword_t user_index, dword_t unk,
lpqword_t xuid_ptr) { lpqword_t xuid_ptr) {
if (user_index) { if (user_index && user_index != 0xFF) {
return X_E_NO_SUCH_USER; return X_E_NO_SUCH_USER;
} }
const auto& user_profile = kernel_state()->user_profile(); const auto& user_profile = kernel_state()->user_profile();
@ -150,11 +150,12 @@ X_HRESULT_result_t XamUserGetSigninInfo(dword_t user_index, dword_t flags,
return X_E_INVALIDARG; return X_E_INVALIDARG;
} }
std::memset(info, 0, sizeof(X_USER_SIGNIN_INFO)); if (user_index && user_index != 0xFF) {
if (user_index) {
return X_E_NO_SUCH_USER; return X_E_NO_SUCH_USER;
} }
std::memset(info, 0, sizeof(X_USER_SIGNIN_INFO));
const auto& user_profile = kernel_state()->user_profile(); const auto& user_profile = kernel_state()->user_profile();
info->xuid = user_profile->xuid(); info->xuid = user_profile->xuid();
info->signin_state = ((cvars::signin_state) ? 1 : 0); info->signin_state = ((cvars::signin_state) ? 1 : 0);
@ -165,7 +166,10 @@ DECLARE_XAM_EXPORT1(XamUserGetSigninInfo, kUserProfiles, kImplemented);
dword_result_t XamUserGetName(dword_t user_index, lpstring_t buffer, dword_result_t XamUserGetName(dword_t user_index, lpstring_t buffer,
dword_t buffer_len) { dword_t buffer_len) {
if (user_index) {
XELOGI("XamUserGetName user_index:(%d) buffer_length:(%d)", user_index, buffer_len);
if (user_index && user_index != 0xFF) {
return X_ERROR_NO_SUCH_USER; return X_ERROR_NO_SUCH_USER;
} }