(memory): zero out memory on free

This commit is contained in:
Liam Kerr 2026-02-13 00:19:04 +00:00
parent b5788b01cd
commit 665be11c76
2 changed files with 47 additions and 0 deletions

View file

@ -1,4 +1,5 @@
#include <stdint.h> #include <stdint.h>
#include <stdbool.h>
#include <stddef.h> #include <stddef.h>
#include "drivers/uart.h" #include "drivers/uart.h"
#include "memory.h" #include "memory.h"
@ -37,6 +38,7 @@ void page_init()
test_memory_integrity(); test_memory_integrity();
test_memory_alignment(); test_memory_alignment();
test_memory_stress(); test_memory_stress();
test_memory_reuse();
// page_free((void *)23); // page_free((void *)23);
} }
@ -143,6 +145,8 @@ void kfree(void *ptr)
} }
header->is_free = 1; header->is_free = 1;
memset(ptr,0,header->size);
HeapHeader *final_block = kcoalesce(header); HeapHeader *final_block = kcoalesce(header);
uintptr_t block_start = (uintptr_t)final_block; uintptr_t block_start = (uintptr_t)final_block;
uintptr_t block_end = block_start + sizeof(HeapHeader) + final_block->size; uintptr_t block_end = block_start + sizeof(HeapHeader) + final_block->size;
@ -306,6 +310,48 @@ void test_memory_integrity()
kfree(e); kfree(e);
} }
void test_memory_reuse()
{
kprint("Running Reuse Test...\n");
uint8_t *big = (uint8_t *)kmalloc(256);
if (!big) {
kprint("Allocation failed aborting reuse test.\n");
return;
}
for (size_t i = 0; i < 256; ++i) {
big[i] = 0xAA;
}
kfree(big);
heap_stats();
uint8_t *small = (uint8_t *)kmalloc(32);
if (!small) {
kprint("Second allocation failed aborting reuse test.\n");
return;
}
bool dirty = false;
for (size_t i = 0; i < 32; ++i) {
if (small[i] != 0) {
kprintf("bad value %x", small[i]);
dirty = true;
break;
}
}
if (dirty) {
kprint("FAIL: Reused block contains leftover data!\n");
} else {
kprint("PASS: Reused block is clean.\n");
}
kfree(small);
heap_stats();
}
void test_memory_alignment() void test_memory_alignment()
{ {
kprint("Running Alignment Test...\n"); kprint("Running Alignment Test...\n");

View file

@ -30,6 +30,7 @@ void kheap_split(HeapHeader *header, size_t size);
void kheap_insert_sorted(HeapHeader *new_block); void kheap_insert_sorted(HeapHeader *new_block);
void kfree(void *ptr); void kfree(void *ptr);
HeapHeader *kcoalesce(HeapHeader *header); HeapHeader *kcoalesce(HeapHeader *header);
void test_memory_reuse();
void test_memory_integrity(); void test_memory_integrity();
void test_memory_alignment(); void test_memory_alignment();
void test_memory_stress(); void test_memory_stress();