summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorPo-Yu Chuang <ratbert@faraday-tech.com>2011-06-09 08:42:17 +0100
committerRussell King <rmk+kernel@arm.linux.org.uk>2011-06-09 10:15:07 +0100
commit373ce3020b03fb6199415ab866595c7d627bbc97 (patch)
tree20c2bc022c8eb35f418ee8e44a7801cf39ad09c4 /arch
parent720c60e1943a06cfd9472ad5a9967dec304e4394 (diff)
downloadlinux-373ce3020b03fb6199415ab866595c7d627bbc97.tar.bz2
ARM: 6955/1: cmpxchg syscall should data abort if page not write
If the page to cmpxchg is user mode read only (not write), we should simulate a data abort first. Signed-off-by: Po-Yu Chuang <ratbert@faraday-tech.com> Acked-by: Nicolas Pitre <nicolas.pitre@linaro.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/kernel/traps.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
index d52eec268b47..c5ead3c2c618 100644
--- a/arch/arm/kernel/traps.c
+++ b/arch/arm/kernel/traps.c
@@ -563,7 +563,7 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs)
if (!pmd_present(*pmd))
goto bad_access;
pte = pte_offset_map_lock(mm, pmd, addr, &ptl);
- if (!pte_present(*pte) || !pte_dirty(*pte)) {
+ if (!pte_present(*pte) || !pte_write(*pte) || !pte_dirty(*pte)) {
pte_unmap_unlock(pte, ptl);
goto bad_access;
}