From 69329dc56951093888d3c0e2139e492873a8fae1 Mon Sep 17 00:00:00 2001 From: Thog Date: Tue, 26 Nov 2019 19:41:17 +0100 Subject: [PATCH] Fix issues on ro implementation (#834) * ro: Fixes some bugs * Fix critical overflow in random computation --- Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs | 9 +++++++-- Ryujinx.HLE/HOS/Services/Ro/ResultCode.cs | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs b/Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs index 0153f4dd1..d2eb38732 100644 --- a/Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs +++ b/Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs @@ -1,5 +1,6 @@ using ARMeilleure.Memory; using Ryujinx.Common; +using Ryujinx.Common.Logging; using Ryujinx.HLE.HOS.Kernel.Common; using Ryujinx.HLE.HOS.Kernel.Memory; using Ryujinx.HLE.HOS.Kernel.Process; @@ -265,13 +266,15 @@ namespace Ryujinx.HLE.HOS.Services.Ro int retryCount; - int addressSpacePageLimit = (int)((memMgr.GetAddrSpaceSize() - size) >> 12); + ulong addressSpacePageLimit = (memMgr.GetAddrSpaceSize() - size) >> 12; for (retryCount = 0; retryCount < MaxMapRetries; retryCount++) { while (true) { - targetAddress = memMgr.GetAddrSpaceBaseAddr() + (ulong)(_random.Next(addressSpacePageLimit) << 12); + ulong randomOffset = (ulong)(uint)_random.Next(0, (int)addressSpacePageLimit) << 12; + + targetAddress = memMgr.GetAddrSpaceBaseAddr() + randomOffset; if (memMgr.InsideAddrSpace(targetAddress, size) && !memMgr.InsideHeapRegion(targetAddress, size) && !memMgr.InsideAliasRegion(targetAddress, size)) { @@ -449,6 +452,8 @@ namespace Ryujinx.HLE.HOS.Services.Ro if (result == ResultCode.Success) { + info.NroMappedAddress = nroMappedAddress; + _nroInfos.Add(info); } } diff --git a/Ryujinx.HLE/HOS/Services/Ro/ResultCode.cs b/Ryujinx.HLE/HOS/Services/Ro/ResultCode.cs index ab1c6ac8c..92bb55029 100644 --- a/Ryujinx.HLE/HOS/Services/Ro/ResultCode.cs +++ b/Ryujinx.HLE/HOS/Services/Ro/ResultCode.cs @@ -3,7 +3,7 @@ enum ResultCode { ModuleId = 22, - ErrorCodeShift = 22, + ErrorCodeShift = 9, Success = 0,