From b5190f16810eb77388c861d1d1773e19644808db Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Sun, 11 Jul 2021 16:24:31 -0300
Subject: Fix virtual memory allocation being out of range (#2464)

---
 Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

(limited to 'Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs')

diff --git a/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs b/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs
index a2db8dcc..e1ab0b93 100644
--- a/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs
+++ b/Ryujinx.HLE/HOS/Kernel/Memory/KPageTableBase.cs
@@ -2411,9 +2411,11 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
             {
                 if (info.State == MemoryState.Unmapped)
                 {
-                    ulong currBaseAddr = info.Address + reservedSize;
+                    ulong currBaseAddr = info.Address <= regionStart ? regionStart : info.Address;
                     ulong currEndAddr = info.Address + info.Size - 1;
 
+                    currBaseAddr += reservedSize;
+
                     ulong address = BitUtils.AlignDown(currBaseAddr, alignment) + reservedStart;
 
                     if (currBaseAddr > address)
@@ -2423,9 +2425,10 @@ namespace Ryujinx.HLE.HOS.Kernel.Memory
 
                     ulong allocationEndAddr = address + totalNeededSize - 1;
 
-                    if (allocationEndAddr <= regionEndAddr &&
-                        allocationEndAddr <= currEndAddr &&
-                        address < allocationEndAddr)
+                    if (info.Address <= address &&
+                        address < allocationEndAddr &&
+                        allocationEndAddr <= regionEndAddr &&
+                        allocationEndAddr <= currEndAddr)
                     {
                         return address;
                     }
-- 
cgit v1.2.3-70-g09d2