hide guard page for stacks that grow upwards
Subsystems (2)
PATCH 1/1 hide guard page for stacks that grow upwards
pa-risc and ia64 have stacks that grow upwards. Don't show the guard page on upward growing vma in /proc/$$/maps
---
This looks useful too ... but I can't see where the code is that made vm_start be PAGE_SIZE lower to begin with. I'd expect to have to make a matching change to make vm_end PAGE_SIZE higher for the VM_GROWSUP areas.
fs/proc/task_mmu.c +5 -2
@@ -210,7 +210,7 @@ static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma)int flags = vma->vm_flags;unsigned long ino =0 ;unsigned long long pgoff =0 ; -unsigned long start; +unsigned long start, end;dev_t dev =0 ;int len;
@@ -223,12 +223,15 @@ static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma)/* We don't show the stack guard page in /proc/maps */ start = vma->vm_start; + end = vma->vm_end;if (vma->vm_flags &VM_GROWSDOWN ) start +=PAGE_SIZE ; +if (vma->vm_flags &VM_GROWSUP ) + end -=PAGE_SIZE ; seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu %n", start, - vma->vm_end, + end, flags & VM_READ ? 'r' : '-', flags & VM_WRITE ? 'w' : '-', flags & VM_EXEC ? 'x' : '-',
Quoted 5 lines · Tony
This looks useful too ... but I can't see where the code is that made
vm_startbePAGE_SIZElower to begin with. I'd expect to have to make a matching change to makevm_endPAGE_SIZEhigher for theVM_GROWSUPareas.
That's the fault path - the very check_stack_guard_page() logic itself.
In other words, nowhere do we _explicitly_ make the stack larger by one page, but nowhere do we explicitly size the stack in the first place! The stack grows by being populated, and every time a new page is populated, check_stack_guard_page() will have expanded the stack vma by one extra page.
Linus