summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorAdmiral H. Curtiss <pikachu025@gmail.com>2020-12-13 06:08:45 +0100
committerAdmiral H. Curtiss <pikachu025@gmail.com>2020-12-13 06:21:07 +0100
commit668b8d60c8ebeeb0a60a0e3b386f79325cbafbbf (patch)
treec6c972c212696d188cce7fe091f89b9b5a407f77 /Source/Core
parentd31249593421dcdb4f6ef09485ec7e3e96cb4632 (diff)
Core/AddressSpace: Return null accessors when no game is running to prevent out-of-bounds memory accesses.
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/HW/AddressSpace.cpp10
-rw-r--r--Source/Core/Core/HW/AddressSpace.h1
-rw-r--r--Source/Core/Core/HW/HW.cpp1
3 files changed, 12 insertions, 0 deletions
diff --git a/Source/Core/Core/HW/AddressSpace.cpp b/Source/Core/Core/HW/AddressSpace.cpp
index 0506db7687..af60db1d04 100644
--- a/Source/Core/Core/HW/AddressSpace.cpp
+++ b/Source/Core/Core/HW/AddressSpace.cpp
@@ -374,9 +374,13 @@ static SmallBlockAccessors s_fake_address_space_accessors;
static CompositeAddressSpaceAccessors s_physical_address_space_accessors_gcn;
static CompositeAddressSpaceAccessors s_physical_address_space_accessors_wii;
static NullAccessors s_null_accessors;
+static bool s_initialized = false;
Accessors* GetAccessors(Type address_space)
{
+ if (!s_initialized)
+ return &s_null_accessors;
+
// default to effective
switch (address_space)
{
@@ -420,6 +424,12 @@ void Init()
s_physical_address_space_accessors_gcn = {{0x00000000, &s_mem1_address_space_accessors}};
s_physical_address_space_accessors_wii = {{0x00000000, &s_mem1_address_space_accessors},
{0x10000000, &s_mem2_address_space_accessors}};
+ s_initialized = true;
+}
+
+void Shutdown()
+{
+ s_initialized = false;
}
} // namespace AddressSpace
diff --git a/Source/Core/Core/HW/AddressSpace.h b/Source/Core/Core/HW/AddressSpace.h
index c1ed71ed20..0df5c1ee40 100644
--- a/Source/Core/Core/HW/AddressSpace.h
+++ b/Source/Core/Core/HW/AddressSpace.h
@@ -48,5 +48,6 @@ struct Accessors
Accessors* GetAccessors(Type address_space);
void Init();
+void Shutdown();
} // namespace AddressSpace
diff --git a/Source/Core/Core/HW/HW.cpp b/Source/Core/Core/HW/HW.cpp
index 3fcaebe863..654164d960 100644
--- a/Source/Core/Core/HW/HW.cpp
+++ b/Source/Core/Core/HW/HW.cpp
@@ -70,6 +70,7 @@ void Shutdown()
CPU::Shutdown();
DVDInterface::Shutdown();
DSP::Shutdown();
+ AddressSpace::Shutdown();
Memory::Shutdown();
ExpansionInterface::Shutdown();
SerialInterface::Shutdown();