From b980782343db075e6d6c3b743fc2aded1c76877b Mon Sep 17 00:00:00 2001 From: Luke Date: Tue, 29 Dec 2020 01:14:08 +0000 Subject: [PATCH] Kernel/VM: Make local_offset in PhysicalRegion::find_one_free_page unsigned An extension to #4613, as I didn't notice that it also happens here. --- Kernel/VM/PhysicalRegion.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Kernel/VM/PhysicalRegion.cpp b/Kernel/VM/PhysicalRegion.cpp index 8cac4d77e4..c5aeef81b2 100644 --- a/Kernel/VM/PhysicalRegion.cpp +++ b/Kernel/VM/PhysicalRegion.cpp @@ -96,11 +96,12 @@ Optional PhysicalRegion::find_one_free_page() // Check if we can draw one from the return queue if (m_recently_returned.size() > 0) { u8 index = get_fast_random() % m_recently_returned.size(); - ptrdiff_t local_offset = m_recently_returned[index].get() - m_lower.get(); + Checked local_offset = m_recently_returned[index].get(); + local_offset -= m_lower.get(); m_recently_returned.remove(index); - ASSERT(local_offset >= 0); - ASSERT((FlatPtr)local_offset < (FlatPtr)(m_pages * PAGE_SIZE)); - return local_offset / PAGE_SIZE; + ASSERT(!local_offset.has_overflow()); + ASSERT(local_offset.value() < (FlatPtr)(m_pages * PAGE_SIZE)); + return local_offset.value() / PAGE_SIZE; } return {}; }