Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9d41255a authored by Larry Bassel's avatar Larry Bassel
Browse files

arm: implement CONFIG_STRICT_MEMORY_RWX for LPAE platforms



The support for CONFIG_STRICT_MEMORY_RWX for LPAE platforms
was missing.

Change-Id: Ice2b8862872cd02488c8431692650b9c7acf2439
Signed-off-by: default avatarLarry Bassel <lbassel@codeaurora.org>
parent 4bb26321
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@
#define PMD_SECT_AP_WRITE	(_AT(pmdval_t, 0))
#define PMD_SECT_AP_READ	(_AT(pmdval_t, 0))
#define PMD_SECT_AP1		(_AT(pmdval_t, 1) << 6)
#define PMD_SECT_AP2		(_AT(pmdval_t, 1) << 7)
#define PMD_SECT_TEX(x)		(_AT(pmdval_t, 0))

/*
+19 −0
Original line number Diff line number Diff line
@@ -297,6 +297,20 @@ static struct mem_type mem_types[] = {
		.prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE,
		.domain    = DOMAIN_KERNEL,
	},
#ifdef CONFIG_ARM_LPAE
	[MT_MEMORY_R] = {
		.prot_sect = PMD_TYPE_SECT | PMD_SECT_AP2 | PMD_SECT_XN,
		.domain    = DOMAIN_KERNEL,
	},
	[MT_MEMORY_RW] = {
		.prot_sect = PMD_TYPE_SECT | PMD_SECT_XN,
		.domain    = DOMAIN_KERNEL,
	},
	[MT_MEMORY_RX] = {
		.prot_sect = PMD_TYPE_SECT | PMD_SECT_AP2,
		.domain    = DOMAIN_KERNEL,
	},
#else
	[MT_MEMORY_R] = {
		.prot_sect = PMD_TYPE_SECT | PMD_SECT_XN,
		.domain    = DOMAIN_KERNEL,
@@ -309,6 +323,7 @@ static struct mem_type mem_types[] = {
		.prot_sect = PMD_TYPE_SECT,
		.domain    = DOMAIN_KERNEL,
	},
#endif
	[MT_ROM] = {
		.prot_sect = PMD_TYPE_SECT,
		.domain    = DOMAIN_KERNEL,
@@ -1464,7 +1479,11 @@ void mem_text_address_writeable(unsigned long addr)
	if ((mem_unprotect.saved_pmd & PMD_TYPE_MASK) != PMD_TYPE_SECT)
		return;

#ifdef CONFIG_ARM_LPAE
	*mem_unprotect.pmd &= ~PMD_SECT_AP2;
#else
	*mem_unprotect.pmd &= ~PMD_SECT_APX;
#endif

	flush_pmd_entry(mem_unprotect.pmd_to_flush);
	flush_tlb_kernel_page(mem_unprotect.addr);