1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 12:47:35 +00:00

Kernel: Do some basic metadata integrity verification in kmalloc/kfree

Use BitmapView::set_range_and_verify_that_all_bits_flip() to validate
the heap chunk metadata bits as we go through them in kmalloc/kfree.
This commit is contained in:
Andreas Kling 2021-04-09 09:56:52 +02:00
parent c268df79e6
commit 86a6366749

View file

@ -92,7 +92,7 @@ public:
u8* ptr = a->data; u8* ptr = a->data;
a->allocation_size_in_chunks = chunks_needed; a->allocation_size_in_chunks = chunks_needed;
m_bitmap.set_range(first_chunk.value(), chunks_needed, true); m_bitmap.set_range_and_verify_that_all_bits_flip(first_chunk.value(), chunks_needed, true);
m_allocated_chunks += chunks_needed; m_allocated_chunks += chunks_needed;
if constexpr (HEAP_SCRUB_BYTE_ALLOC != 0) { if constexpr (HEAP_SCRUB_BYTE_ALLOC != 0) {
@ -113,7 +113,7 @@ public:
VERIFY(m_bitmap.get(start)); VERIFY(m_bitmap.get(start));
VERIFY((u8*)a + a->allocation_size_in_chunks * CHUNK_SIZE <= m_chunks + m_total_chunks * CHUNK_SIZE); VERIFY((u8*)a + a->allocation_size_in_chunks * CHUNK_SIZE <= m_chunks + m_total_chunks * CHUNK_SIZE);
m_bitmap.set_range(start, a->allocation_size_in_chunks, false); m_bitmap.set_range_and_verify_that_all_bits_flip(start, a->allocation_size_in_chunks, false);
VERIFY(m_allocated_chunks >= a->allocation_size_in_chunks); VERIFY(m_allocated_chunks >= a->allocation_size_in_chunks);
m_allocated_chunks -= a->allocation_size_in_chunks; m_allocated_chunks -= a->allocation_size_in_chunks;