diff options
Diffstat (limited to 'Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptorTable.cs')
| -rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptorTable.cs | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptorTable.cs b/Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptorTable.cs index 6aa211dd..0986adf7 100644 --- a/Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptorTable.cs +++ b/Ryujinx.HLE/HOS/Kernel/Ipc/KBufferDescriptorTable.cs @@ -115,19 +115,20 @@ namespace Ryujinx.HLE.HOS.Kernel.Ipc ulong clientEndAddrTruncated = BitUtils.AlignDown(clientEndAddr, KMemoryManager.PageSize); ulong clientEndAddrRounded = BitUtils.AlignUp (clientEndAddr, KMemoryManager.PageSize); - ulong serverEndAddrTruncated = BitUtils.AlignDown(clientEndAddr, KMemoryManager.PageSize); + ulong serverEndAddrTruncated = BitUtils.AlignDown(serverEndAddr, KMemoryManager.PageSize); - if (clientEndAddrTruncated < clientAddrRounded) + if (clientEndAddrTruncated < clientEndAddrRounded && + (clientAddrTruncated == clientAddrRounded || clientAddrTruncated < clientEndAddrTruncated)) { - KernelResult result = memoryManager.CopyDataToCurrentProcess( + KernelResult result = memoryManager.CopyDataFromCurrentProcess( clientEndAddrTruncated, clientEndAddr - clientEndAddrTruncated, - serverEndAddrTruncated, stateMask, stateMask, MemoryPermission.ReadAndWrite, attributeMask, - MemoryAttribute.None); + MemoryAttribute.None, + serverEndAddrTruncated); if (result != KernelResult.Success) { |
