Round up the size of the allocated memory to avoid heap corruption

This commit is contained in:
Maschell 2022-02-11 20:36:37 +01:00
parent cd56a105e3
commit f513e1a374

View File

@ -395,6 +395,9 @@ void MemoryMapping_setupMemoryMapping() {
OSInitMutex(&allocMutex); OSInitMutex(&allocMutex);
} }
#define ROUNDDOWN(val, align) ((val) & ~(align - 1))
#define ROUNDUP(val, align) ROUNDDOWN(((val) + (align - 1)), align)
void *MemoryMapping_allocEx(uint32_t size, int32_t align, bool videoOnly) { void *MemoryMapping_allocEx(uint32_t size, int32_t align, bool videoOnly) {
OSLockMutex(&allocMutex); OSLockMutex(&allocMutex);
void *res = nullptr; void *res = nullptr;
@ -411,7 +414,10 @@ void *MemoryMapping_allocEx(uint32_t size, int32_t align, bool videoOnly) {
continue; continue;
} }
res = MEMAllocFromExpHeapEx(heapHandle, size, align); // We round up the size to avoid heap corruption.
// FSReadFile expects the buffer size to be a multiple of 0x40
// This can remove once all modules/plugins have been updated :)
res = MEMAllocFromExpHeapEx(heapHandle, ROUNDUP(size, 0x40), align);
if (res != nullptr) { if (res != nullptr) {
break; break;
} }