git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH] uml: avoid already done dirtying
[pandora-kernel.git]
/
arch
/
um
/
kernel
/
trap_kern.c
diff --git
a/arch/um/kernel/trap_kern.c
b/arch/um/kernel/trap_kern.c
index
b5fc89f
..
87cc6fd
100644
(file)
--- a/
arch/um/kernel/trap_kern.c
+++ b/
arch/um/kernel/trap_kern.c
@@
-57,7
+57,8
@@
good_area:
if(is_write && !(vma->vm_flags & VM_WRITE))
goto out;
if(is_write && !(vma->vm_flags & VM_WRITE))
goto out;
- if(!(vma->vm_flags & (VM_READ | VM_EXEC)))
+ /* Don't require VM_READ|VM_EXEC for write faults! */
+ if(!is_write && !(vma->vm_flags & (VM_READ | VM_EXEC)))
goto out;
do {
goto out;
do {
@@
-84,8
+85,7
@@
survive:
pte = pte_offset_kernel(pmd, address);
} while(!pte_present(*pte));
err = 0;
pte = pte_offset_kernel(pmd, address);
} while(!pte_present(*pte));
err = 0;
- *pte = pte_mkyoung(*pte);
- if(pte_write(*pte)) *pte = pte_mkdirty(*pte);
+ WARN_ON(!pte_young(*pte) || (is_write && !pte_dirty(*pte)));
flush_tlb_page(vma, address);
out:
up_read(&mm->mmap_sem);
flush_tlb_page(vma, address);
out:
up_read(&mm->mmap_sem);