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

Commit 5112be8e authored by Neeti Desai's avatar Neeti Desai
Browse files

arm64: Add support for FREE_PAGES_RDONLY



Add config option to trigger page a fault if any
code attempts to write to a page on the buddy list

Change-Id: Ic5ab791c4117606519c7b9eb4c2876f246d23320
Signed-off-by: default avatarNeeti Desai <neetid@codeaurora.org>
parent b74ddb13
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -44,4 +44,17 @@ config FORCE_PAGES

          If unsure say N.

config FREE_PAGES_RDONLY
        bool "Set pages as read only while on the buddy list"
        select FORCE_PAGES
        select PAGE_POISONING
        help
          Pages are always mapped in the kernel. This means that anyone
          can write to the page if they have the address. Enable this option
          to mark pages as read only to trigger a fault if any code attempts
          to write to a page on the buddy list. This may have a performance
          impact.

          If unsure, say N.

endmenu
+8 −0
Original line number Diff line number Diff line
@@ -169,4 +169,12 @@ int set_memory_ro(unsigned long addr, int numpages);
int set_memory_rw(unsigned long addr, int numpages);
int set_memory_x(unsigned long addr, int numpages);
int set_memory_nx(unsigned long addr, int numpages);

#ifdef CONFIG_FREE_PAGES_RDONLY
#define mark_addr_rdonly(a)	set_memory_ro((unsigned long)a, 1);
#define mark_addr_rdwrite(a)	set_memory_rw((unsigned long)a, 1);
#else
#define mark_addr_rdonly(a)
#define mark_addr_rdwrite(a)
#endif
#endif
+6 −4
Original line number Diff line number Diff line
@@ -66,11 +66,13 @@ static int change_memory_common(unsigned long addr, int numpages,
	unsigned long end = start + size;
	int ret;

	if (!IS_ENABLED(CONFIG_FORCE_PAGES)) {
		if (start < MODULES_VADDR || start >= MODULES_END)
			return -EINVAL;

		if (end < MODULES_VADDR || end >= MODULES_END)
			return -EINVAL;
	}

	if (set)
		ret = apply_to_page_range(&init_mm, start, size,