From 2a67de78db4a39ba7977b1dcfd4270c3680465b5 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 | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/xenia/kernel/xboxkrnl/xboxkrnl_memory.cc b/src/xenia/kernel/xboxkrnl/xboxkrnl_memory.cc index 7d72b3215..7f52facdd 100644 --- a/src/xenia/kernel/xboxkrnl/xboxkrnl_memory.cc +++ b/src/xenia/kernel/xboxkrnl/xboxkrnl_memory.cc @@ -425,8 +425,15 @@ 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 | + 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. + // Affected titles: 594B07D1 (used on boot), 544307D1 (used in menu) + assert_false(xe::bit_count(protect_bits & required_protect_bits) > 1); return; }