Messages in this thread | | | Subject | Re: Removing MAX_ARG_PAGES (request for comments/assistance) | From | Peter Zijlstra <> | Date | Wed, 11 Oct 2006 15:14:20 +0200 |
| |
On Tue, 2006-10-10 at 17:05 -0700, Ollie Wild wrote:
> + vma->vm_flags &= ~VM_EXEC; > + // FIXME: Are the next two lines sufficient, or do I need to > + // do some additional magic? > + vma->vm_flags |= mm->def_flags; > + vma->vm_page_prot = protection_map[vma->vm_flags & 0x7];
Yeah, you'll need to change the PTEs for those pages you created by calling get_user_page() by calling an mprotect like function; perhaps something like:
struct vm_area_struct *prev; unsigned long vm_flags = vma->vm_flags;
s/vma->vm_flags/vm_flags/g
err = mprotect_fixup(vma, &prev, vma->vm_start, vma->vm_end, vm_flags); BUG_ON(prev != vma);
mprotect_fixup will then set the new protection on all PTEs and update vma->vm_flags and vma->vm_page_prot.
> + /* Move stack pages down in memory. */ > + if (stack_shift) { > + // FIXME: Verify the shift is OK. > +
What exactly are you wondering about? the call to move_vma looks sane to me
> + /* This should be safe even with overlap because we > + * are shifting down. */ > + ret = move_vma(vma, vma->vm_start, > + vma->vm_end - vma->vm_start, > + vma->vm_end - vma->vm_start, > + vma->vm_start - stack_shift); > + if (ret & ~PAGE_MASK) { > + up_write(&mm->mmap_sem); > + return ret; > + } > }
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |