[PATCH] ARM: 2698/1: Enable kernel r/w access to user pages on ARMv6
authorCatalin Marinas <catalin.marinas@arm.com>
Fri, 24 Jun 2005 20:27:39 +0000 (21:27 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 24 Jun 2005 20:27:39 +0000 (21:27 +0100)
Patch from Catalin Marinas

cpu_v6_set_pte() sets the kernel access rights to r/o for user
pages (L_PTE_USER) when neither L_PTE_WRITE nor L_PTE_DIRTY are
set. This causes a kernel data abort when writing the TLS value
in the 0xffff0000 page. This patch enables the kernel r/w access.

Signed-off-by: Catalin Marinas
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mm/proc-v6.S

index 0aa73d4147838b07f41cac3f09ed0011efa03bd5..e3d8510f43400b9c66b85bf8f7995b5653050409 100644 (file)
@@ -132,8 +132,8 @@ ENTRY(cpu_v6_switch_mm)
  *       100x   1   0   1      r/o     no acc
  *       10x0   1   0   1      r/o     no acc
  *       1011   0   0   1      r/w     no acc
- *       110x   1   1   0      r/o     r/o
- *       11x0   1   1   0      r/o     r/o
+ *       110x   0   1   0      r/w     r/o
+ *       11x0   0   1   0      r/w     r/o
  *       1111   0   1   1      r/w     r/w
  */
 ENTRY(cpu_v6_set_pte)
@@ -150,7 +150,7 @@ ENTRY(cpu_v6_set_pte)
        tst     r1, #L_PTE_USER
        orrne   r2, r2, #AP1 | nG
        tstne   r2, #APX
-       eorne   r2, r2, #AP0
+       bicne   r2, r2, #APX | AP0
 
        tst     r1, #L_PTE_YOUNG
        biceq   r2, r2, #APX | AP1 | AP0