Fix virtual memory allocation being out of range (#2464)

This commit is contained in:
gdkchan 2021-07-11 16:24:31 -03:00 committed by GitHub
parent 0d841c8d51
commit b5190f1681
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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;
}