OSDN Git Service

ARM: 6955/1: cmpxchg syscall should data abort if page not write
authorPo-Yu Chuang <ratbert@faraday-tech.com>
Thu, 9 Jun 2011 07:42:17 +0000 (08:42 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 9 Jun 2011 09:15:07 +0000 (10:15 +0100)
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>
arch/arm/kernel/traps.c

index d52eec2..c5ead3c 100644 (file)
@@ -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;
                }