public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Use correct page protection for put_dirty_page
@ 2003-05-11  8:08 Andi Kleen
  2003-05-11  8:30 ` William Lee Irwin III
  2003-05-11  8:32 ` Andrew Morton
  0 siblings, 2 replies; 5+ messages in thread
From: Andi Kleen @ 2003-05-11  8:08 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel


put_page_dirty must use the page protection of the stack VMA, not hardcoded
PAGE_COPY. They can be different e.g. when the stack is set non executable
via VM_STACK_FLAGS.

I added an fallback path for now because I'm not sure if the stack VMA
is always predowngrowed here, if the printk better it may be also needed
to add an stack extension here.

-Andi

--- linux-2.5.69-amd64/fs/exec.c-o	2003-04-20 21:21:50.000000000 +0200
+++ linux-2.5.69-amd64/fs/exec.c	2003-05-11 08:38:35.000000000 +0200
@@ -292,7 +292,9 @@
 	pgd_t * pgd;
 	pmd_t * pmd;
 	pte_t * pte;
+	pgprot_t prot;
 	struct pte_chain *pte_chain;
+	struct vm_area_struct *vma;
 
 	if (page_count(page) != 1)
 		printk(KERN_ERR "mem_map disagrees with %p at %08lx\n", page, address);
@@ -314,7 +316,13 @@
 	}
 	lru_cache_add_active(page);
 	flush_dcache_page(page);
-	set_pte(pte, pte_mkdirty(pte_mkwrite(mk_pte(page, PAGE_COPY))));
+	vma = find_vma(tsk->mm, address);
+	if (!vma) { 
+		printk("put_dirty_page: stack vma not extended yet %lx?\n",address); 
+		prot = PAGE_COPY;
+	} else
+		prot = vma->vm_page_prot;
+	set_pte(pte, pte_mkdirty(pte_mkwrite(mk_pte(page, prot))));
 	pte_chain = page_add_rmap(page, pte, pte_chain);
 	pte_unmap(pte);
 	tsk->mm->rss++;

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2003-05-11  8:24 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-05-11  8:08 [PATCH] Use correct page protection for put_dirty_page Andi Kleen
2003-05-11  8:30 ` William Lee Irwin III
2003-05-11  8:36   ` Andi Kleen
2003-05-11  8:32 ` Andrew Morton
2003-05-11  8:37   ` Andi Kleen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox