I'm trying to implement xv6's process table with double linked list of dynamically allocated process structures. For memory allocations I use home-brewed buddy allocator.
As I understood, xv6's vanilla implementation maps fixed number of processes' kernel stacks to kernel memory followed by unmapped page in (see KSTACK()
macro).
/* vm.c */
vmmake(void){
...
proc_mapstacks(kpgtbl)
...
}
So, in my implementation kernel stacks will be allocated in some place of heap with kalloc
(actually bd_malloc(PAGESIZE)
) and may be not such secure as kernel stacks from plane kernel memory.
Is it worth worrying about, what else security issues may appear and exists in original riscv version?
I don't allocate additional unmapped page for these stacks may be it is important. I didn't found explanation in xv6-book or any article of vulnerabilities in vanilla xv6.