[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Is expand_stack buggy wrt locked_vm?



I think there might be a problem with the way expand_stack
updates locked_vm. 

Assume the kernel is trying to copyout some amount(512b) of 
data into the user's stack, and the underlying pages are not 
yet allocated, and the stack is marked VM_LOCKED. The page 
fault will trigger an expand_stack, which will update the 
locked_vm by an amount depending on where the kernel is trying 
to write out the data. Back in the fault handling code, 
handle_mm_fault will allocate just one page and be done. So,
although the process has incremented its number of locked pages
by 1, expand_stack has updated locked_vm by a possibly bigger
amount.

I think the right fix is for expand_stack to fault in all the
intermediate pages, by something like

	if (vma->vm_flags & VM_LOCKED) {
		make_pages_present(address, old vma->vm_start);
	}

Comments?

Kanoj
kanoj@engr.sgi.com
--
To unsubscribe, send a message with 'unsubscribe linux-mm my@address'
in the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://humbolt.geo.uu.nl/Linux-MM/