[PATCH] ARM: 2656/1: Access permission bits are wrong for kernel XIP sections on...
authorGeorge G. Davis <davis_g@com.rmk.(none)>
Fri, 29 Apr 2005 21:08:35 +0000 (22:08 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 29 Apr 2005 21:08:35 +0000 (22:08 +0100)
Patch from George G. Davis

This patch is required for kernel XIP support on ARMv6 machines.  It ensures that the access permission bits for kernel XIP section descriptors are APX=1 and AP[1:0]=01, which is Kernel read-only/User no access permissions.  Prior to this change, kernel XIP section descriptor access permissions were set to Kernel no access/User no access on ARMv6 machines and the kernel would therefore hang upon entry to userspace when set_fs(USER_DS) was executed.

Signed-off-by: Steve Longerbeam
Signed-off-by: George G. Davis
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mm/mm-armv.c

index f5a87db..585dfb8 100644 (file)
@@ -411,9 +411,10 @@ static void __init build_mem_type_table(void)
                mem_types[MT_MEMORY].prot_sect &= ~PMD_BIT4;
                mem_types[MT_ROM].prot_sect &= ~PMD_BIT4;
                /*
-                * Mark cache clean areas read only from SVC mode
-                * and no access from userspace.
+                * Mark cache clean areas and XIP ROM read only
+                * from SVC mode and no access from userspace.
                 */
+               mem_types[MT_ROM].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
                mem_types[MT_MINICLEAN].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
                mem_types[MT_CACHECLEAN].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
        }