diff options
author | Lioncash <mathew1800@gmail.com> | 2018-09-14 01:09:04 +0200 |
---|---|---|
committer | Lioncash <mathew1800@gmail.com> | 2018-09-14 03:34:48 +0200 |
commit | 7bd2faad9a41a04d81e5b33d454ca01d9eb650e0 (patch) | |
tree | 79e5e5b17f95e21eef659d9ca9d2f7638d418c97 /src/core/hle | |
parent | Merge pull request #1308 from valentinvanelslande/ipc (diff) | |
download | yuzu-7bd2faad9a41a04d81e5b33d454ca01d9eb650e0.tar yuzu-7bd2faad9a41a04d81e5b33d454ca01d9eb650e0.tar.gz yuzu-7bd2faad9a41a04d81e5b33d454ca01d9eb650e0.tar.bz2 yuzu-7bd2faad9a41a04d81e5b33d454ca01d9eb650e0.tar.lz yuzu-7bd2faad9a41a04d81e5b33d454ca01d9eb650e0.tar.xz yuzu-7bd2faad9a41a04d81e5b33d454ca01d9eb650e0.tar.zst yuzu-7bd2faad9a41a04d81e5b33d454ca01d9eb650e0.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/hle/kernel/errors.h | 2 | ||||
-rw-r--r-- | src/core/hle/kernel/svc.cpp | 6 |
2 files changed, 8 insertions, 0 deletions
diff --git a/src/core/hle/kernel/errors.h b/src/core/hle/kernel/errors.h index ad39c8271..2be2fad82 100644 --- a/src/core/hle/kernel/errors.h +++ b/src/core/hle/kernel/errors.h @@ -17,6 +17,7 @@ enum { // Confirmed Switch OS error codes MaxConnectionsReached = 7, + InvalidSize = 101, InvalidAddress = 102, HandleTableFull = 105, InvalidMemoryState = 106, @@ -55,6 +56,7 @@ constexpr ResultCode ERR_INVALID_MEMORY_PERMISSIONS(ErrorModule::Kernel, ErrCodes::InvalidMemoryPermissions); constexpr ResultCode ERR_INVALID_HANDLE(ErrorModule::Kernel, ErrCodes::InvalidHandle); constexpr ResultCode ERR_INVALID_PROCESSOR_ID(ErrorModule::Kernel, ErrCodes::InvalidProcessorId); +constexpr ResultCode ERR_INVALID_SIZE(ErrorModule::Kernel, ErrCodes::InvalidSize); constexpr ResultCode ERR_INVALID_STATE(ErrorModule::Kernel, ErrCodes::InvalidState); constexpr ResultCode ERR_INVALID_THREAD_PRIORITY(ErrorModule::Kernel, ErrCodes::InvalidThreadPriority); diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index f500fd2e7..a3d169e46 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp @@ -39,6 +39,12 @@ namespace Kernel { /// Set the process heap to a given Size. It can both extend and shrink the heap. static ResultCode SetHeapSize(VAddr* heap_addr, u64 heap_size) { LOG_TRACE(Kernel_SVC, "called, heap_size=0x{:X}", heap_size); + + // Size must be a multiple of 0x200000 (2MB) and be equal to or less than 4GB. + if ((heap_size & 0xFFFFFFFE001FFFFF) != 0) { + return ERR_INVALID_SIZE; + } + auto& process = *Core::CurrentProcess(); CASCADE_RESULT(*heap_addr, process.HeapAllocate(Memory::HEAP_VADDR, heap_size, VMAPermission::ReadWrite)); |