1
0
Fork 0
mirror of https://github.com/hermitcore/libhermit.git synced 2025-03-09 00:00:03 +01:00

protect heap by setting the NX flag in PML4

This commit is contained in:
Stefan Lankes 2016-05-21 15:55:34 +02:00
parent 44cc801525
commit 8a1534f545

View file

@ -214,6 +214,9 @@ void page_fault_handler(struct state *s)
spinlock_irqsave_lock(&page_lock);
if ((task->heap) && (viraddr >= task->heap->start) && (viraddr < task->heap->end)) {
size_t flags;
int ret;
/*
* do we have a valid page table entry? => flush TLB and return
*/
@ -233,7 +236,11 @@ void page_fault_handler(struct state *s)
goto default_handler;
}
int ret = page_map(viraddr, phyaddr, 1, PG_USER|PG_RW);
flags = PG_USER|PG_RW;
if (has_nx()) // set no execution flag to protect the heap
flags |= PG_XD;
ret = page_map(viraddr, phyaddr, 1, flags);
if (BUILTIN_EXPECT(ret, 0)) {
kprintf("map_region: could not map %#lx to %#lx, task = %u\n", phyaddr, viraddr, task->id);
put_page(phyaddr);