aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThog <me@thog.eu>2019-11-26 19:41:17 +0100
committerAc_K <Acoustik666@gmail.com>2019-11-26 19:41:17 +0100
commit69329dc56951093888d3c0e2139e492873a8fae1 (patch)
tree24f61b04f19ef6cbb65c7aa0462ee41eb5c367de
parent3f3ae99a0fa048e5ad532b5ebe646eb572787626 (diff)
Fix issues on ro implementation (#834)
* ro: Fixes some bugs * Fix critical overflow in random computation
-rw-r--r--Ryujinx.HLE/HOS/Services/Ro/IRoInterface.cs9
-rw-r--r--Ryujinx.HLE/HOS/Services/Ro/ResultCode.cs2
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 0153f4dd..d2eb3873 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 ab1c6ac8..92bb5502 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,