MemBlockInfo: Fix potential out-of-bounds in the slab map, reported by Nemoumbra

This commit is contained in:
Henrik Rydgård 2023-12-13 21:53:16 +01:00
parent 859e124f1a
commit 2f1389233e

View File

@ -288,7 +288,12 @@ void MemSlabMap::Clear() {
MemSlabMap::Slab *MemSlabMap::FindSlab(uint32_t addr) {
// Jump ahead using our index.
Slab *slab = heads_[addr / SLICE_SIZE];
size_t slabIndex = addr / SLICE_SIZE;
if (slabIndex >= heads_.size()) {
// Shouldn't happen, but apparently can.
return nullptr;
}
Slab *slab = heads_[slabIndex];
// We often move forward, so check the last find.
if (lastFind_->start > slab->start && lastFind_->start <= addr)
slab = lastFind_;