diff options
Diffstat (limited to 'src/kernel/src/BitMapMgr.cc')
| -rw-r--r-- | src/kernel/src/BitMapMgr.cc | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/kernel/src/BitMapMgr.cc b/src/kernel/src/BitMapMgr.cc index 40bbe837..76a6a42f 100644 --- a/src/kernel/src/BitMapMgr.cc +++ b/src/kernel/src/BitMapMgr.cc @@ -12,7 +12,7 @@ #include <NeKit/KernelPanic.h> #define kBitMapMagic (0x10210U) - +#define kBitMapMaxSz gib_cast(4) #define kBitMapMagIdx (0U) #define kBitMapSizeIdx (1U) #define kBitMapUsedIdx (2U) @@ -47,7 +47,12 @@ namespace HAL { UIntPtr* ptr_bit_set = reinterpret_cast<UIntPtr*>(page_ptr); + if (!page_ptr) return No; + if (ptr_bit_set[kBitMapMagIdx] != kBitMapMagic) return No; + if (ptr_bit_set[kBitMapSizeIdx] > kBitMapMaxSz) return No; + + this->GetBitMapStatus(ptr_bit_set); kBitMapCursor += ptr_bit_set[kBitMapSizeIdx]; @@ -55,8 +60,6 @@ namespace HAL { ptr_bit_set[kBitMapSizeIdx] = 0UL; ptr_bit_set[kBitMapUsedIdx] = No; - this->GetBitMapStatus(ptr_bit_set); - return Yes; } @@ -80,10 +83,11 @@ namespace HAL { /***********************************************************************************/ auto FindBitMap(VoidPtr base_ptr, SizeT size, Bool wr, Bool user, SizeT pad) -> VoidPtr { if (!size) return nullptr; + if (size > kBitMapMaxSz) return nullptr; VoidPtr base = reinterpret_cast<VoidPtr>(base_ptr); - STATIC SizeT biggest = 0UL; + STATIC SizeT biggest{0UL}; while (YES) { UIntPtr* ptr_bit_set = reinterpret_cast<UIntPtr*>(base); @@ -154,9 +158,7 @@ namespace HAL { STATIC Detail::IBitMapProxy kBitMapMgr; - auto mm_is_bitmap(VoidPtr ptr) -> BOOL { - return kBitMapMgr.IsBitMap(ptr); - } + auto mm_is_bitmap(VoidPtr ptr) -> BOOL { return kBitMapMgr.IsBitMap(ptr); } /***********************************************************************************/ /// @brief Allocate a new page to be used by the OS. |
