From mboxrd@z Thu Jan 1 00:00:00 1970 From: Suzuki.Poulose@arm.com (Suzuki K. Poulose) Date: Fri, 25 Sep 2015 09:44:10 +0100 Subject: [PATCH v2 0/7] arm64: relax Image placement rules In-Reply-To: References: <1442968663-31843-1-git-send-email-ard.biesheuvel@linaro.org> <560426BF.4030300@arm.com> Message-ID: <5605095A.10707@arm.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 25/09/15 00:19, Ard Biesheuvel wrote: > On 24 September 2015 at 09:38, Ard Biesheuvel wrote: >> On 24 September 2015 at 09:37, Suzuki K. Poulose wrote: >>> On 23/09/15 01:37, Ard Biesheuvel wrote: >>> >>> Ard, >>> >>> I gave your series a quick run and dumping the kernel page tables(with >>> CONFIG_ARM64_PTDUMP) >>> I find this problem : >>> >>> ... >>> >>> ---[ Kernel Mapping ]--- >>> 0xffffffbffc000000-0xffffffbffc600000 6M RW x SHD AF >>> MEM/NORMAL ***** >>> 0xffffffbffc600000-0xffffffbffc7f5000 2004K RW x SHD AF UXN >>> MEM/NORMAL >>> 0xffffffbffc7f5000-0xffffffbffc875000 512K RW NX SHD AF UXN >>> MEM/NORMAL >>> 0xffffffbffc875000-0xffffffbffca00000 1580K RW x SHD AF UXN >>> MEM/NORMAL >>> ---[ Linear Mapping ]--- >>> 0xffffffc000000000-0xffffffc040000000 1G RW NX SHD AF UXN >>> MEM/NORMAL >>> >>> >>> Note that the first mapping in the kernel doesn't have UXN set, which is a >>> regression. >>> I haven't started digging into it yet, but I thought I will point it out >>> here, in case you >>> already fixed it. >>> >> >> Ok, thanks for pointing that out. I will look into it. >> > > Turns out that, since the kernel mapping is not overwritten by the > linear mapping, it retains the original permissions assigned in > head.S. So this is enough to fix it > > """ > diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S > index 2df4a55f00d4..fcd250cff4bf 100644 > --- a/arch/arm64/kernel/head.S > +++ b/arch/arm64/kernel/head.S > @@ -62,8 +62,8 @@ > /* > * Initial memory map attributes. > */ > -#define PTE_FLAGS PTE_TYPE_PAGE | PTE_AF | PTE_SHARED > -#define PMD_FLAGS PMD_TYPE_SECT | PMD_SECT_AF | PMD_SECT_S > +#define PTE_FLAGS PTE_TYPE_PAGE | PTE_AF | PTE_SHARED | PTE_UXN > +#define PMD_FLAGS PMD_TYPE_SECT | PMD_SECT_AF | PMD_SECT_S | PMD_SECT_UXN > > #ifdef CONFIG_ARM64_64K_PAGES > #define MM_MMUFLAGS PTE_ATTRINDX(MT_NORMAL) | PTE_FLAGS > """ > Yes, that fixes it. With that I get : ---[ Kernel Mapping ]--- 0xffffffbffc000000-0xffffffbffc600000 6M RW x SHD AF UXN MEM/NORMAL 0xffffffbffc600000-0xffffffbffc7f5000 2004K RW x SHD AF UXN MEM/NORMAL 0xffffffbffc7f5000-0xffffffbffc875000 512K RW NX SHD AF UXN MEM/NORMAL 0xffffffbffc875000-0xffffffbffca00000 1580K RW x SHD AF UXN MEM/NORMAL ---[ Linear Mapping ]--- 0xffffffc000000000-0xffffffc080000000 2G RW NX SHD AF UXN MEM/NORMAL 0xffffffc800000000-0xffffffc880000000 2G RW NX SHD AF UXN MEM/NORMAL > >>> Note: I see that you have used CONFIG_ARM64_64K_PAGES to handle >>> section/table mapping >>> (which I have tried to cleanup in 16K page size series and which is not >>> merged yet). >>> We should be careful when we merge our patches, as we could miss such new >>> cases. >>> >> >> I was aware of this, and I think it makes sense to the 16 KB pages to >> be merged first, and then I will rebase these patches on top of it. >> > > Do you have a git tree with the latest version? > Yes, it is available here : git://linux-arm.org/linux-skp.git 16k/v2-4.3-rc1 Thanks Suzuki