From 283accd876a07199574eef0b8228e6d207a3d1a3 Mon Sep 17 00:00:00 2001 From: Gliniak Date: Wed, 15 Dec 2021 11:33:58 +0100 Subject: [PATCH] [Kernel/Memory] Check for required protect_bits combinations --- src/xenia/kernel/xboxkrnl/xboxkrnl_memory.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/xenia/kernel/xboxkrnl/xboxkrnl_memory.cc b/src/xenia/kernel/xboxkrnl/xboxkrnl_memory.cc index 7d72b3215..1818e36bd 100644 --- a/src/xenia/kernel/xboxkrnl/xboxkrnl_memory.cc +++ b/src/xenia/kernel/xboxkrnl/xboxkrnl_memory.cc @@ -425,8 +425,14 @@ DECLARE_XBOXKRNL_EXPORT2(MmQueryAddressProtect, kMemory, kImplemented, void MmSetAddressProtect_entry(lpvoid_t base_address, dword_t region_size, dword_t protect_bits) { - if (!protect_bits) { - XELOGE("MmSetAddressProtect: Failed due to incorrect protect_bits"); + constexpr uint32_t required_protect_bits = + X_PAGE_NOACCESS | X_PAGE_READONLY | X_PAGE_READWRITE | + X_PAGE_EXECUTE_READ | X_PAGE_EXECUTE_READWRITE; + + if (xe::bit_count(protect_bits & required_protect_bits) != 1) { + // Many titles use invalid combination with zero valid bits set. + // We're skipping assertion for these cases to prevent unnecessary spam. + assert_false(xe::bit_count(protect_bits & required_protect_bits) > 1); return; }