summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/src/Swap
diff options
context:
space:
mode:
Diffstat (limited to 'dev/kernel/src/Swap')
-rw-r--r--dev/kernel/src/Swap/DiskSwap.cc6
1 files changed, 5 insertions, 1 deletions
diff --git a/dev/kernel/src/Swap/DiskSwap.cc b/dev/kernel/src/Swap/DiskSwap.cc
index 8578450c..b9cfaf77 100644
--- a/dev/kernel/src/Swap/DiskSwap.cc
+++ b/dev/kernel/src/Swap/DiskSwap.cc
@@ -8,6 +8,8 @@
#include <SwapKit/DiskSwap.h>
namespace Kernel {
+static constexpr UInt32 kSwapDiskHeaderMagic = 0x44535750; // 'DSWP'
+
/***********************************************************************************/
/// @brief Write memory chunk onto disk.
/// @param fork_name The swap name to recognize this memory region.
@@ -20,7 +22,7 @@ BOOL DiskSwapInterface::Write(const Char* fork_name, SizeT fork_name_len, SWAP_D
if (*fork_name == 0) return NO;
- if (!data) return NO;
+ if (!data || data->fMagic != kSwapDiskHeaderMagic) return NO;
FileStream file(kSwapPageFilePath, kRestrictWRB);
@@ -52,6 +54,8 @@ SWAP_DISK_HEADER* DiskSwapInterface::Read(const Char* fork_name, SizeT fork_name
VoidPtr blob = file.Read(fork_name, sizeof(SWAP_DISK_HEADER) + data_len);
+ if (!blob || ((SWAP_DISK_HEADER*)blob)->fMagic != kSwapDiskHeaderMagic) return nullptr;
+
return reinterpret_cast<SWAP_DISK_HEADER*>(blob);
}
} // namespace Kernel