All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <20171010155619.GA2517@arm.com>

diff --git a/a/1.txt b/N1/1.txt
index aea08fe..e44b200 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -28,7 +28,7 @@ Will
 
 --->8
 
->From 36c6c7c06273d08348b47c1a182116b0a1df8363 Mon Sep 17 00:00:00 2001
+From 36c6c7c06273d08348b47c1a182116b0a1df8363 Mon Sep 17 00:00:00 2001
 From: Will Deacon <will.deacon@arm.com>
 Date: Tue, 10 Oct 2017 15:49:43 +0100
 Subject: [PATCH] arm64: kasan: Avoid using vmemmap_populate to initialise
diff --git a/a/content_digest b/N1/content_digest
index bafd213..fe29c68 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -2,29 +2,8 @@
  "ref\020171009221931.1481-8-pasha.tatashin@oracle.com\0"
  "From\0Will Deacon <will.deacon@arm.com>\0"
  "Subject\0Re: [PATCH v11 7/9] arm64/kasan: add and use kasan_map_populate()\0"
- "Date\0Tue, 10 Oct 2017 16:56:20 +0100\0"
- "To\0Pavel Tatashin <pasha.tatashin@oracle.com>\0"
- "Cc\0linux-kernel@vger.kernel.org"
-  sparclinux@vger.kernel.org
-  linux-mm@kvack.org
-  linuxppc-dev@lists.ozlabs.org
-  linux-s390@vger.kernel.org
-  linux-arm-kernel@lists.infradead.org
-  x86@kernel.org
-  kasan-dev@googlegroups.com
-  borntraeger@de.ibm.com
-  heiko.carstens@de.ibm.com
-  davem@davemloft.net
-  willy@infradead.org
-  mhocko@kernel.org
-  ard.biesheuvel@linaro.org
-  mark.rutland@arm.com
-  catalin.marinas@arm.com
-  sam@ravnborg.org
-  mgorman@techsingularity.net
-  steven.sistare@oracle.com
-  daniel.m.jordan@oracle.com
- " bob.picco@oracle.com\0"
+ "Date\0Tue, 10 Oct 2017 15:56:20 +0000\0"
+ "To\0linux-arm-kernel@lists.infradead.org\0"
  "\00:1\0"
  "b\0"
  "Hi Pavel,\n"
@@ -57,7 +36,7 @@
  "\n"
  "--->8\n"
  "\n"
- ">From 36c6c7c06273d08348b47c1a182116b0a1df8363 Mon Sep 17 00:00:00 2001\n"
+ "From 36c6c7c06273d08348b47c1a182116b0a1df8363 Mon Sep 17 00:00:00 2001\n"
  "From: Will Deacon <will.deacon@arm.com>\n"
  "Date: Tue, 10 Oct 2017 15:49:43 +0100\n"
  "Subject: [PATCH] arm64: kasan: Avoid using vmemmap_populate to initialise\n"
@@ -342,4 +321,4 @@
  "-- \n"
  2.1.4
 
-54f0d924118ea9e7d5a9a4e88d80a65afd549928e112fc77d43f662045976622
+5eb8b6dd9b2926a87ae0013f942e0dde1751fe0769836c72cab7c7fcf4e5a66f

diff --git a/a/1.txt b/N2/1.txt
index aea08fe..49bcc6e 100644
--- a/a/1.txt
+++ b/N2/1.txt
@@ -301,7 +301,7 @@ index cb4af2951c90..b922826d9908 100644
 -	 * kernel image with SWAPPER_BLOCK_SIZE mappings, so we have to round
 -	 * the start and end addresses to SWAPPER_BLOCK_SIZE as well, to prevent
 -	 * kasan_populate_zero_shadow() from replacing the page table entries
--	 * (PMD or PTE) at the edges of the shadow region for the kernel
+-	 * (PMD or PTE)@the edges of the shadow region for the kernel
 -	 * image.
 -	 */
 -	kimg_shadow_start = round_down(kimg_shadow_start, SWAPPER_BLOCK_SIZE);
diff --git a/a/content_digest b/N2/content_digest
index bafd213..d77b625 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -1,30 +1,9 @@
  "ref\020171009221931.1481-1-pasha.tatashin@oracle.com\0"
  "ref\020171009221931.1481-8-pasha.tatashin@oracle.com\0"
- "From\0Will Deacon <will.deacon@arm.com>\0"
- "Subject\0Re: [PATCH v11 7/9] arm64/kasan: add and use kasan_map_populate()\0"
+ "From\0will.deacon@arm.com (Will Deacon)\0"
+ "Subject\0[PATCH v11 7/9] arm64/kasan: add and use kasan_map_populate()\0"
  "Date\0Tue, 10 Oct 2017 16:56:20 +0100\0"
- "To\0Pavel Tatashin <pasha.tatashin@oracle.com>\0"
- "Cc\0linux-kernel@vger.kernel.org"
-  sparclinux@vger.kernel.org
-  linux-mm@kvack.org
-  linuxppc-dev@lists.ozlabs.org
-  linux-s390@vger.kernel.org
-  linux-arm-kernel@lists.infradead.org
-  x86@kernel.org
-  kasan-dev@googlegroups.com
-  borntraeger@de.ibm.com
-  heiko.carstens@de.ibm.com
-  davem@davemloft.net
-  willy@infradead.org
-  mhocko@kernel.org
-  ard.biesheuvel@linaro.org
-  mark.rutland@arm.com
-  catalin.marinas@arm.com
-  sam@ravnborg.org
-  mgorman@techsingularity.net
-  steven.sistare@oracle.com
-  daniel.m.jordan@oracle.com
- " bob.picco@oracle.com\0"
+ "To\0linux-arm-kernel@lists.infradead.org\0"
  "\00:1\0"
  "b\0"
  "Hi Pavel,\n"
@@ -330,7 +309,7 @@
  "-\t * kernel image with SWAPPER_BLOCK_SIZE mappings, so we have to round\n"
  "-\t * the start and end addresses to SWAPPER_BLOCK_SIZE as well, to prevent\n"
  "-\t * kasan_populate_zero_shadow() from replacing the page table entries\n"
- "-\t * (PMD or PTE) at the edges of the shadow region for the kernel\n"
+ "-\t * (PMD or PTE)@the edges of the shadow region for the kernel\n"
  "-\t * image.\n"
  "-\t */\n"
  "-\tkimg_shadow_start = round_down(kimg_shadow_start, SWAPPER_BLOCK_SIZE);\n"
@@ -342,4 +321,4 @@
  "-- \n"
  2.1.4
 
-54f0d924118ea9e7d5a9a4e88d80a65afd549928e112fc77d43f662045976622
+f014dc64a9e245d1e83c7b73ca492fd53d5241be48219926105564d4693b5a26

diff --git a/a/1.txt b/N3/1.txt
index aea08fe..7c24497 100644
--- a/a/1.txt
+++ b/N3/1.txt
@@ -27,288 +27,3 @@ Cheers,
 Will
 
 --->8
-
->From 36c6c7c06273d08348b47c1a182116b0a1df8363 Mon Sep 17 00:00:00 2001
-From: Will Deacon <will.deacon@arm.com>
-Date: Tue, 10 Oct 2017 15:49:43 +0100
-Subject: [PATCH] arm64: kasan: Avoid using vmemmap_populate to initialise
- shadow
-
-The kasan shadow is currently mapped using vmemmap_populate since that
-provides a semi-convenient way to map pages into swapper. However, since
-that no longer zeroes the mapped pages, it is not suitable for kasan,
-which requires that the shadow is zeroed in order to avoid false
-positives.
-
-This patch removes our reliance on vmemmap_populate and reuses the
-existing kasan page table code, which is already required for creating
-the early shadow.
-
-Signed-off-by: Will Deacon <will.deacon@arm.com>
----
- arch/arm64/Kconfig         |   2 +-
- arch/arm64/mm/kasan_init.c | 176 +++++++++++++++++++--------------------------
- 2 files changed, 74 insertions(+), 104 deletions(-)
-
-diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
-index 0df64a6a56d4..888580b9036e 100644
---- a/arch/arm64/Kconfig
-+++ b/arch/arm64/Kconfig
-@@ -68,7 +68,7 @@ config ARM64
- 	select HAVE_ARCH_BITREVERSE
- 	select HAVE_ARCH_HUGE_VMAP
- 	select HAVE_ARCH_JUMP_LABEL
--	select HAVE_ARCH_KASAN if SPARSEMEM_VMEMMAP && !(ARM64_16K_PAGES && ARM64_VA_BITS_48)
-+	select HAVE_ARCH_KASAN if !(ARM64_16K_PAGES && ARM64_VA_BITS_48)
- 	select HAVE_ARCH_KGDB
- 	select HAVE_ARCH_MMAP_RND_BITS
- 	select HAVE_ARCH_MMAP_RND_COMPAT_BITS if COMPAT
-diff --git a/arch/arm64/mm/kasan_init.c b/arch/arm64/mm/kasan_init.c
-index cb4af2951c90..b922826d9908 100644
---- a/arch/arm64/mm/kasan_init.c
-+++ b/arch/arm64/mm/kasan_init.c
-@@ -11,6 +11,7 @@
-  */
- 
- #define pr_fmt(fmt) "kasan: " fmt
-+#include <linux/bootmem.h>
- #include <linux/kasan.h>
- #include <linux/kernel.h>
- #include <linux/sched/task.h>
-@@ -28,66 +29,6 @@
- 
- static pgd_t tmp_pg_dir[PTRS_PER_PGD] __initdata __aligned(PGD_SIZE);
- 
--/* Creates mappings for kasan during early boot. The mapped memory is zeroed */
--static int __meminit kasan_map_populate(unsigned long start, unsigned long end,
--					int node)
--{
--	unsigned long addr, pfn, next;
--	unsigned long long size;
--	pgd_t *pgd;
--	pud_t *pud;
--	pmd_t *pmd;
--	pte_t *pte;
--	int ret;
--
--	ret = vmemmap_populate(start, end, node);
--	/*
--	 * We might have partially populated memory, so check for no entries,
--	 * and zero only those that actually exist.
--	 */
--	for (addr = start; addr < end; addr = next) {
--		pgd = pgd_offset_k(addr);
--		if (pgd_none(*pgd)) {
--			next = pgd_addr_end(addr, end);
--			continue;
--		}
--
--		pud = pud_offset(pgd, addr);
--		if (pud_none(*pud)) {
--			next = pud_addr_end(addr, end);
--			continue;
--		}
--		if (pud_sect(*pud)) {
--			/* This is PUD size page */
--			next = pud_addr_end(addr, end);
--			size = PUD_SIZE;
--			pfn = pud_pfn(*pud);
--		} else {
--			pmd = pmd_offset(pud, addr);
--			if (pmd_none(*pmd)) {
--				next = pmd_addr_end(addr, end);
--				continue;
--			}
--			if (pmd_sect(*pmd)) {
--				/* This is PMD size page */
--				next = pmd_addr_end(addr, end);
--				size = PMD_SIZE;
--				pfn = pmd_pfn(*pmd);
--			} else {
--				pte = pte_offset_kernel(pmd, addr);
--				next = addr + PAGE_SIZE;
--				if (pte_none(*pte))
--					continue;
--				/* This is base size page */
--				size = PAGE_SIZE;
--				pfn = pte_pfn(*pte);
--			}
--		}
--		memset(phys_to_virt(PFN_PHYS(pfn)), 0, size);
--	}
--	return ret;
--}
--
- /*
-  * The p*d_populate functions call virt_to_phys implicitly so they can't be used
-  * directly on kernel symbols (bm_p*d). All the early functions are called too
-@@ -95,77 +36,117 @@ static int __meminit kasan_map_populate(unsigned long start, unsigned long end,
-  * with the physical address from __pa_symbol.
-  */
- 
--static void __init kasan_early_pte_populate(pmd_t *pmd, unsigned long addr,
--					unsigned long end)
-+static phys_addr_t __init kasan_alloc_zeroed_page(int node)
- {
--	pte_t *pte;
--	unsigned long next;
-+	void *p = memblock_virt_alloc_try_nid(PAGE_SIZE, PAGE_SIZE,
-+					      __pa(MAX_DMA_ADDRESS),
-+					      MEMBLOCK_ALLOC_ACCESSIBLE, node);
-+	return __pa(p);
-+}
- 
--	if (pmd_none(*pmd))
--		__pmd_populate(pmd, __pa_symbol(kasan_zero_pte), PMD_TYPE_TABLE);
-+static pte_t *__init kasan_pte_offset(pmd_t *pmd, unsigned long addr, int node,
-+				      bool early)
-+{
-+	if (pmd_none(*pmd)) {
-+		phys_addr_t pte_phys = early ? __pa_symbol(kasan_zero_pte)
-+					     : kasan_alloc_zeroed_page(node);
-+		__pmd_populate(pmd, pte_phys, PMD_TYPE_TABLE);
-+	}
-+
-+	return early ? pte_offset_kimg(pmd, addr)
-+		     : pte_offset_kernel(pmd, addr);
-+}
-+
-+static pmd_t *__init kasan_pmd_offset(pud_t *pud, unsigned long addr, int node,
-+				      bool early)
-+{
-+	if (pud_none(*pud)) {
-+		phys_addr_t pmd_phys = early ? __pa_symbol(kasan_zero_pmd)
-+					     : kasan_alloc_zeroed_page(node);
-+		__pud_populate(pud, pmd_phys, PMD_TYPE_TABLE);
-+	}
-+
-+	return early ? pmd_offset_kimg(pud, addr) : pmd_offset(pud, addr);
-+}
-+
-+static pud_t *__init kasan_pud_offset(pgd_t *pgd, unsigned long addr, int node,
-+				      bool early)
-+{
-+	if (pgd_none(*pgd)) {
-+		phys_addr_t pud_phys = early ? __pa_symbol(kasan_zero_pud)
-+					     : kasan_alloc_zeroed_page(node);
-+		__pgd_populate(pgd, pud_phys, PMD_TYPE_TABLE);
-+	}
-+
-+	return early ? pud_offset_kimg(pgd, addr) : pud_offset(pgd, addr);
-+}
-+
-+static void __init kasan_pte_populate(pmd_t *pmd, unsigned long addr,
-+				      unsigned long end, int node, bool early)
-+{
-+	unsigned long next;
-+	pte_t *pte = kasan_pte_offset(pmd, addr, node, early);
- 
--	pte = pte_offset_kimg(pmd, addr);
- 	do {
-+		phys_addr_t page_phys = early ? __pa_symbol(kasan_zero_page)
-+					      : kasan_alloc_zeroed_page(node);
- 		next = addr + PAGE_SIZE;
--		set_pte(pte, pfn_pte(sym_to_pfn(kasan_zero_page),
--					PAGE_KERNEL));
-+		set_pte(pte, pfn_pte(__phys_to_pfn(page_phys), PAGE_KERNEL));
- 	} while (pte++, addr = next, addr != end && pte_none(*pte));
- }
- 
--static void __init kasan_early_pmd_populate(pud_t *pud,
--					unsigned long addr,
--					unsigned long end)
-+static void __init kasan_pmd_populate(pud_t *pud, unsigned long addr,
-+				      unsigned long end, int node, bool early)
- {
--	pmd_t *pmd;
- 	unsigned long next;
-+	pmd_t *pmd = kasan_pmd_offset(pud, addr, node, early);
- 
--	if (pud_none(*pud))
--		__pud_populate(pud, __pa_symbol(kasan_zero_pmd), PMD_TYPE_TABLE);
--
--	pmd = pmd_offset_kimg(pud, addr);
- 	do {
- 		next = pmd_addr_end(addr, end);
--		kasan_early_pte_populate(pmd, addr, next);
-+		kasan_pte_populate(pmd, addr, next, node, early);
- 	} while (pmd++, addr = next, addr != end && pmd_none(*pmd));
- }
- 
--static void __init kasan_early_pud_populate(pgd_t *pgd,
--					unsigned long addr,
--					unsigned long end)
-+static void __init kasan_pud_populate(pgd_t *pgd, unsigned long addr,
-+				      unsigned long end, int node, bool early)
- {
--	pud_t *pud;
- 	unsigned long next;
-+	pud_t *pud = kasan_pud_offset(pgd, addr, node, early);
- 
--	if (pgd_none(*pgd))
--		__pgd_populate(pgd, __pa_symbol(kasan_zero_pud), PUD_TYPE_TABLE);
--
--	pud = pud_offset_kimg(pgd, addr);
- 	do {
- 		next = pud_addr_end(addr, end);
--		kasan_early_pmd_populate(pud, addr, next);
-+		kasan_pmd_populate(pud, addr, next, node, early);
- 	} while (pud++, addr = next, addr != end && pud_none(*pud));
- }
- 
--static void __init kasan_map_early_shadow(void)
-+static void __init kasan_pgd_populate(unsigned long addr, unsigned long end,
-+				      int node, bool early)
- {
--	unsigned long addr = KASAN_SHADOW_START;
--	unsigned long end = KASAN_SHADOW_END;
- 	unsigned long next;
- 	pgd_t *pgd;
- 
- 	pgd = pgd_offset_k(addr);
- 	do {
- 		next = pgd_addr_end(addr, end);
--		kasan_early_pud_populate(pgd, addr, next);
-+		kasan_pud_populate(pgd, addr, next, node, early);
- 	} while (pgd++, addr = next, addr != end);
- }
- 
-+/* The early shadow maps everything to a single page of zeroes */
- asmlinkage void __init kasan_early_init(void)
- {
- 	BUILD_BUG_ON(KASAN_SHADOW_OFFSET != KASAN_SHADOW_END - (1UL << 61));
- 	BUILD_BUG_ON(!IS_ALIGNED(KASAN_SHADOW_START, PGDIR_SIZE));
- 	BUILD_BUG_ON(!IS_ALIGNED(KASAN_SHADOW_END, PGDIR_SIZE));
--	kasan_map_early_shadow();
-+	kasan_pgd_populate(KASAN_SHADOW_START, KASAN_SHADOW_END, NUMA_NO_NODE,
-+			   true);
-+}
-+
-+/* Set up full kasan mappings, ensuring that the mapped pages are zeroed */
-+static void __init kasan_map_populate(unsigned long start, unsigned long end,
-+				      int node)
-+{
-+	kasan_pgd_populate(start & PAGE_MASK, PAGE_ALIGN(end), node, false);
- }
- 
- /*
-@@ -224,17 +205,6 @@ void __init kasan_init(void)
- 	kasan_map_populate(kimg_shadow_start, kimg_shadow_end,
- 			   pfn_to_nid(virt_to_pfn(lm_alias(_text))));
- 
--	/*
--	 * kasan_map_populate() has populated the shadow region that covers the
--	 * kernel image with SWAPPER_BLOCK_SIZE mappings, so we have to round
--	 * the start and end addresses to SWAPPER_BLOCK_SIZE as well, to prevent
--	 * kasan_populate_zero_shadow() from replacing the page table entries
--	 * (PMD or PTE) at the edges of the shadow region for the kernel
--	 * image.
--	 */
--	kimg_shadow_start = round_down(kimg_shadow_start, SWAPPER_BLOCK_SIZE);
--	kimg_shadow_end = round_up(kimg_shadow_end, SWAPPER_BLOCK_SIZE);
--
- 	kasan_populate_zero_shadow((void *)KASAN_SHADOW_START,
- 				   (void *)mod_shadow_start);
- 	kasan_populate_zero_shadow((void *)kimg_shadow_end,
--- 
-2.1.4
diff --git a/a/content_digest b/N3/content_digest
index bafd213..ae52010 100644
--- a/a/content_digest
+++ b/N3/content_digest
@@ -55,291 +55,6 @@
  "\n"
  "Will\n"
  "\n"
- "--->8\n"
- "\n"
- ">From 36c6c7c06273d08348b47c1a182116b0a1df8363 Mon Sep 17 00:00:00 2001\n"
- "From: Will Deacon <will.deacon@arm.com>\n"
- "Date: Tue, 10 Oct 2017 15:49:43 +0100\n"
- "Subject: [PATCH] arm64: kasan: Avoid using vmemmap_populate to initialise\n"
- " shadow\n"
- "\n"
- "The kasan shadow is currently mapped using vmemmap_populate since that\n"
- "provides a semi-convenient way to map pages into swapper. However, since\n"
- "that no longer zeroes the mapped pages, it is not suitable for kasan,\n"
- "which requires that the shadow is zeroed in order to avoid false\n"
- "positives.\n"
- "\n"
- "This patch removes our reliance on vmemmap_populate and reuses the\n"
- "existing kasan page table code, which is already required for creating\n"
- "the early shadow.\n"
- "\n"
- "Signed-off-by: Will Deacon <will.deacon@arm.com>\n"
- "---\n"
- " arch/arm64/Kconfig         |   2 +-\n"
- " arch/arm64/mm/kasan_init.c | 176 +++++++++++++++++++--------------------------\n"
- " 2 files changed, 74 insertions(+), 104 deletions(-)\n"
- "\n"
- "diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig\n"
- "index 0df64a6a56d4..888580b9036e 100644\n"
- "--- a/arch/arm64/Kconfig\n"
- "+++ b/arch/arm64/Kconfig\n"
- "@@ -68,7 +68,7 @@ config ARM64\n"
- " \tselect HAVE_ARCH_BITREVERSE\n"
- " \tselect HAVE_ARCH_HUGE_VMAP\n"
- " \tselect HAVE_ARCH_JUMP_LABEL\n"
- "-\tselect HAVE_ARCH_KASAN if SPARSEMEM_VMEMMAP && !(ARM64_16K_PAGES && ARM64_VA_BITS_48)\n"
- "+\tselect HAVE_ARCH_KASAN if !(ARM64_16K_PAGES && ARM64_VA_BITS_48)\n"
- " \tselect HAVE_ARCH_KGDB\n"
- " \tselect HAVE_ARCH_MMAP_RND_BITS\n"
- " \tselect HAVE_ARCH_MMAP_RND_COMPAT_BITS if COMPAT\n"
- "diff --git a/arch/arm64/mm/kasan_init.c b/arch/arm64/mm/kasan_init.c\n"
- "index cb4af2951c90..b922826d9908 100644\n"
- "--- a/arch/arm64/mm/kasan_init.c\n"
- "+++ b/arch/arm64/mm/kasan_init.c\n"
- "@@ -11,6 +11,7 @@\n"
- "  */\n"
- " \n"
- " #define pr_fmt(fmt) \"kasan: \" fmt\n"
- "+#include <linux/bootmem.h>\n"
- " #include <linux/kasan.h>\n"
- " #include <linux/kernel.h>\n"
- " #include <linux/sched/task.h>\n"
- "@@ -28,66 +29,6 @@\n"
- " \n"
- " static pgd_t tmp_pg_dir[PTRS_PER_PGD] __initdata __aligned(PGD_SIZE);\n"
- " \n"
- "-/* Creates mappings for kasan during early boot. The mapped memory is zeroed */\n"
- "-static int __meminit kasan_map_populate(unsigned long start, unsigned long end,\n"
- "-\t\t\t\t\tint node)\n"
- "-{\n"
- "-\tunsigned long addr, pfn, next;\n"
- "-\tunsigned long long size;\n"
- "-\tpgd_t *pgd;\n"
- "-\tpud_t *pud;\n"
- "-\tpmd_t *pmd;\n"
- "-\tpte_t *pte;\n"
- "-\tint ret;\n"
- "-\n"
- "-\tret = vmemmap_populate(start, end, node);\n"
- "-\t/*\n"
- "-\t * We might have partially populated memory, so check for no entries,\n"
- "-\t * and zero only those that actually exist.\n"
- "-\t */\n"
- "-\tfor (addr = start; addr < end; addr = next) {\n"
- "-\t\tpgd = pgd_offset_k(addr);\n"
- "-\t\tif (pgd_none(*pgd)) {\n"
- "-\t\t\tnext = pgd_addr_end(addr, end);\n"
- "-\t\t\tcontinue;\n"
- "-\t\t}\n"
- "-\n"
- "-\t\tpud = pud_offset(pgd, addr);\n"
- "-\t\tif (pud_none(*pud)) {\n"
- "-\t\t\tnext = pud_addr_end(addr, end);\n"
- "-\t\t\tcontinue;\n"
- "-\t\t}\n"
- "-\t\tif (pud_sect(*pud)) {\n"
- "-\t\t\t/* This is PUD size page */\n"
- "-\t\t\tnext = pud_addr_end(addr, end);\n"
- "-\t\t\tsize = PUD_SIZE;\n"
- "-\t\t\tpfn = pud_pfn(*pud);\n"
- "-\t\t} else {\n"
- "-\t\t\tpmd = pmd_offset(pud, addr);\n"
- "-\t\t\tif (pmd_none(*pmd)) {\n"
- "-\t\t\t\tnext = pmd_addr_end(addr, end);\n"
- "-\t\t\t\tcontinue;\n"
- "-\t\t\t}\n"
- "-\t\t\tif (pmd_sect(*pmd)) {\n"
- "-\t\t\t\t/* This is PMD size page */\n"
- "-\t\t\t\tnext = pmd_addr_end(addr, end);\n"
- "-\t\t\t\tsize = PMD_SIZE;\n"
- "-\t\t\t\tpfn = pmd_pfn(*pmd);\n"
- "-\t\t\t} else {\n"
- "-\t\t\t\tpte = pte_offset_kernel(pmd, addr);\n"
- "-\t\t\t\tnext = addr + PAGE_SIZE;\n"
- "-\t\t\t\tif (pte_none(*pte))\n"
- "-\t\t\t\t\tcontinue;\n"
- "-\t\t\t\t/* This is base size page */\n"
- "-\t\t\t\tsize = PAGE_SIZE;\n"
- "-\t\t\t\tpfn = pte_pfn(*pte);\n"
- "-\t\t\t}\n"
- "-\t\t}\n"
- "-\t\tmemset(phys_to_virt(PFN_PHYS(pfn)), 0, size);\n"
- "-\t}\n"
- "-\treturn ret;\n"
- "-}\n"
- "-\n"
- " /*\n"
- "  * The p*d_populate functions call virt_to_phys implicitly so they can't be used\n"
- "  * directly on kernel symbols (bm_p*d). All the early functions are called too\n"
- "@@ -95,77 +36,117 @@ static int __meminit kasan_map_populate(unsigned long start, unsigned long end,\n"
- "  * with the physical address from __pa_symbol.\n"
- "  */\n"
- " \n"
- "-static void __init kasan_early_pte_populate(pmd_t *pmd, unsigned long addr,\n"
- "-\t\t\t\t\tunsigned long end)\n"
- "+static phys_addr_t __init kasan_alloc_zeroed_page(int node)\n"
- " {\n"
- "-\tpte_t *pte;\n"
- "-\tunsigned long next;\n"
- "+\tvoid *p = memblock_virt_alloc_try_nid(PAGE_SIZE, PAGE_SIZE,\n"
- "+\t\t\t\t\t      __pa(MAX_DMA_ADDRESS),\n"
- "+\t\t\t\t\t      MEMBLOCK_ALLOC_ACCESSIBLE, node);\n"
- "+\treturn __pa(p);\n"
- "+}\n"
- " \n"
- "-\tif (pmd_none(*pmd))\n"
- "-\t\t__pmd_populate(pmd, __pa_symbol(kasan_zero_pte), PMD_TYPE_TABLE);\n"
- "+static pte_t *__init kasan_pte_offset(pmd_t *pmd, unsigned long addr, int node,\n"
- "+\t\t\t\t      bool early)\n"
- "+{\n"
- "+\tif (pmd_none(*pmd)) {\n"
- "+\t\tphys_addr_t pte_phys = early ? __pa_symbol(kasan_zero_pte)\n"
- "+\t\t\t\t\t     : kasan_alloc_zeroed_page(node);\n"
- "+\t\t__pmd_populate(pmd, pte_phys, PMD_TYPE_TABLE);\n"
- "+\t}\n"
- "+\n"
- "+\treturn early ? pte_offset_kimg(pmd, addr)\n"
- "+\t\t     : pte_offset_kernel(pmd, addr);\n"
- "+}\n"
- "+\n"
- "+static pmd_t *__init kasan_pmd_offset(pud_t *pud, unsigned long addr, int node,\n"
- "+\t\t\t\t      bool early)\n"
- "+{\n"
- "+\tif (pud_none(*pud)) {\n"
- "+\t\tphys_addr_t pmd_phys = early ? __pa_symbol(kasan_zero_pmd)\n"
- "+\t\t\t\t\t     : kasan_alloc_zeroed_page(node);\n"
- "+\t\t__pud_populate(pud, pmd_phys, PMD_TYPE_TABLE);\n"
- "+\t}\n"
- "+\n"
- "+\treturn early ? pmd_offset_kimg(pud, addr) : pmd_offset(pud, addr);\n"
- "+}\n"
- "+\n"
- "+static pud_t *__init kasan_pud_offset(pgd_t *pgd, unsigned long addr, int node,\n"
- "+\t\t\t\t      bool early)\n"
- "+{\n"
- "+\tif (pgd_none(*pgd)) {\n"
- "+\t\tphys_addr_t pud_phys = early ? __pa_symbol(kasan_zero_pud)\n"
- "+\t\t\t\t\t     : kasan_alloc_zeroed_page(node);\n"
- "+\t\t__pgd_populate(pgd, pud_phys, PMD_TYPE_TABLE);\n"
- "+\t}\n"
- "+\n"
- "+\treturn early ? pud_offset_kimg(pgd, addr) : pud_offset(pgd, addr);\n"
- "+}\n"
- "+\n"
- "+static void __init kasan_pte_populate(pmd_t *pmd, unsigned long addr,\n"
- "+\t\t\t\t      unsigned long end, int node, bool early)\n"
- "+{\n"
- "+\tunsigned long next;\n"
- "+\tpte_t *pte = kasan_pte_offset(pmd, addr, node, early);\n"
- " \n"
- "-\tpte = pte_offset_kimg(pmd, addr);\n"
- " \tdo {\n"
- "+\t\tphys_addr_t page_phys = early ? __pa_symbol(kasan_zero_page)\n"
- "+\t\t\t\t\t      : kasan_alloc_zeroed_page(node);\n"
- " \t\tnext = addr + PAGE_SIZE;\n"
- "-\t\tset_pte(pte, pfn_pte(sym_to_pfn(kasan_zero_page),\n"
- "-\t\t\t\t\tPAGE_KERNEL));\n"
- "+\t\tset_pte(pte, pfn_pte(__phys_to_pfn(page_phys), PAGE_KERNEL));\n"
- " \t} while (pte++, addr = next, addr != end && pte_none(*pte));\n"
- " }\n"
- " \n"
- "-static void __init kasan_early_pmd_populate(pud_t *pud,\n"
- "-\t\t\t\t\tunsigned long addr,\n"
- "-\t\t\t\t\tunsigned long end)\n"
- "+static void __init kasan_pmd_populate(pud_t *pud, unsigned long addr,\n"
- "+\t\t\t\t      unsigned long end, int node, bool early)\n"
- " {\n"
- "-\tpmd_t *pmd;\n"
- " \tunsigned long next;\n"
- "+\tpmd_t *pmd = kasan_pmd_offset(pud, addr, node, early);\n"
- " \n"
- "-\tif (pud_none(*pud))\n"
- "-\t\t__pud_populate(pud, __pa_symbol(kasan_zero_pmd), PMD_TYPE_TABLE);\n"
- "-\n"
- "-\tpmd = pmd_offset_kimg(pud, addr);\n"
- " \tdo {\n"
- " \t\tnext = pmd_addr_end(addr, end);\n"
- "-\t\tkasan_early_pte_populate(pmd, addr, next);\n"
- "+\t\tkasan_pte_populate(pmd, addr, next, node, early);\n"
- " \t} while (pmd++, addr = next, addr != end && pmd_none(*pmd));\n"
- " }\n"
- " \n"
- "-static void __init kasan_early_pud_populate(pgd_t *pgd,\n"
- "-\t\t\t\t\tunsigned long addr,\n"
- "-\t\t\t\t\tunsigned long end)\n"
- "+static void __init kasan_pud_populate(pgd_t *pgd, unsigned long addr,\n"
- "+\t\t\t\t      unsigned long end, int node, bool early)\n"
- " {\n"
- "-\tpud_t *pud;\n"
- " \tunsigned long next;\n"
- "+\tpud_t *pud = kasan_pud_offset(pgd, addr, node, early);\n"
- " \n"
- "-\tif (pgd_none(*pgd))\n"
- "-\t\t__pgd_populate(pgd, __pa_symbol(kasan_zero_pud), PUD_TYPE_TABLE);\n"
- "-\n"
- "-\tpud = pud_offset_kimg(pgd, addr);\n"
- " \tdo {\n"
- " \t\tnext = pud_addr_end(addr, end);\n"
- "-\t\tkasan_early_pmd_populate(pud, addr, next);\n"
- "+\t\tkasan_pmd_populate(pud, addr, next, node, early);\n"
- " \t} while (pud++, addr = next, addr != end && pud_none(*pud));\n"
- " }\n"
- " \n"
- "-static void __init kasan_map_early_shadow(void)\n"
- "+static void __init kasan_pgd_populate(unsigned long addr, unsigned long end,\n"
- "+\t\t\t\t      int node, bool early)\n"
- " {\n"
- "-\tunsigned long addr = KASAN_SHADOW_START;\n"
- "-\tunsigned long end = KASAN_SHADOW_END;\n"
- " \tunsigned long next;\n"
- " \tpgd_t *pgd;\n"
- " \n"
- " \tpgd = pgd_offset_k(addr);\n"
- " \tdo {\n"
- " \t\tnext = pgd_addr_end(addr, end);\n"
- "-\t\tkasan_early_pud_populate(pgd, addr, next);\n"
- "+\t\tkasan_pud_populate(pgd, addr, next, node, early);\n"
- " \t} while (pgd++, addr = next, addr != end);\n"
- " }\n"
- " \n"
- "+/* The early shadow maps everything to a single page of zeroes */\n"
- " asmlinkage void __init kasan_early_init(void)\n"
- " {\n"
- " \tBUILD_BUG_ON(KASAN_SHADOW_OFFSET != KASAN_SHADOW_END - (1UL << 61));\n"
- " \tBUILD_BUG_ON(!IS_ALIGNED(KASAN_SHADOW_START, PGDIR_SIZE));\n"
- " \tBUILD_BUG_ON(!IS_ALIGNED(KASAN_SHADOW_END, PGDIR_SIZE));\n"
- "-\tkasan_map_early_shadow();\n"
- "+\tkasan_pgd_populate(KASAN_SHADOW_START, KASAN_SHADOW_END, NUMA_NO_NODE,\n"
- "+\t\t\t   true);\n"
- "+}\n"
- "+\n"
- "+/* Set up full kasan mappings, ensuring that the mapped pages are zeroed */\n"
- "+static void __init kasan_map_populate(unsigned long start, unsigned long end,\n"
- "+\t\t\t\t      int node)\n"
- "+{\n"
- "+\tkasan_pgd_populate(start & PAGE_MASK, PAGE_ALIGN(end), node, false);\n"
- " }\n"
- " \n"
- " /*\n"
- "@@ -224,17 +205,6 @@ void __init kasan_init(void)\n"
- " \tkasan_map_populate(kimg_shadow_start, kimg_shadow_end,\n"
- " \t\t\t   pfn_to_nid(virt_to_pfn(lm_alias(_text))));\n"
- " \n"
- "-\t/*\n"
- "-\t * kasan_map_populate() has populated the shadow region that covers the\n"
- "-\t * kernel image with SWAPPER_BLOCK_SIZE mappings, so we have to round\n"
- "-\t * the start and end addresses to SWAPPER_BLOCK_SIZE as well, to prevent\n"
- "-\t * kasan_populate_zero_shadow() from replacing the page table entries\n"
- "-\t * (PMD or PTE) at the edges of the shadow region for the kernel\n"
- "-\t * image.\n"
- "-\t */\n"
- "-\tkimg_shadow_start = round_down(kimg_shadow_start, SWAPPER_BLOCK_SIZE);\n"
- "-\tkimg_shadow_end = round_up(kimg_shadow_end, SWAPPER_BLOCK_SIZE);\n"
- "-\n"
- " \tkasan_populate_zero_shadow((void *)KASAN_SHADOW_START,\n"
- " \t\t\t\t   (void *)mod_shadow_start);\n"
- " \tkasan_populate_zero_shadow((void *)kimg_shadow_end,\n"
- "-- \n"
- 2.1.4
+ --->8
 
-54f0d924118ea9e7d5a9a4e88d80a65afd549928e112fc77d43f662045976622
+b75491045d8bdded6478c478e5cfa875d1397cdb126121cd3687fb3a00d4ae92

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.