From 546c0a5d9b7c6de74d0e9bdbb9f647679f65ef3d Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 22 May 2016 01:34:31 -0700 Subject: [PATCH] Fix buffer overflow in RAM caching feature. Would mainly affect files not even block sizes, such as CSO files, but might affect all files. Oops. Fixes #8764. --- Core/FileLoaders/RamCachingFileLoader.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Core/FileLoaders/RamCachingFileLoader.cpp b/Core/FileLoaders/RamCachingFileLoader.cpp index b4f9453941..6c781a36d5 100644 --- a/Core/FileLoaders/RamCachingFileLoader.cpp +++ b/Core/FileLoaders/RamCachingFileLoader.cpp @@ -90,13 +90,13 @@ size_t RamCachingFileLoader::ReadAt(s64 absolutePos, size_t bytes, void *data) { } void RamCachingFileLoader::InitCache() { - cache_ = (u8 *)malloc(filesize_); + lock_guard guard(blocksMutex_); + u32 blockCount = (u32)((filesize_ + BLOCK_SIZE - 1) >> BLOCK_SHIFT); + // Overallocate for the last block. + cache_ = (u8 *)malloc((size_t)blockCount << BLOCK_SHIFT); if (cache_ == nullptr) { return; } - - lock_guard guard(blocksMutex_); - u32 blockCount = (u32)((filesize_ + BLOCK_SIZE - 1) >> BLOCK_SHIFT); aheadRemaining_ = blockCount; blocks_.resize(blockCount); }