Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1702476
| From | Pavel Tatashin <pasha.tatashin@oracle.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [v4 10/15] x86/kasan: explicitly zero kasan shadow memory |
| Date | 2017-08-02 22:50 +0200 |
| Message-ID | <ua8KC-6uU-31@gated-at.bofh.it> (permalink) |
| References | <ua8AW-6r3-21@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
To optimize the performance of struct page initialization,
vmemmap_populate() will no longer zero memory.
We must explicitly zero the memory that is allocated by vmemmap_populate()
for kasan, as this memory does not go through struct page initialization
path.
Signed-off-by: Pavel Tatashin <pasha.tatashin@oracle.com>
Reviewed-by: Steven Sistare <steven.sistare@oracle.com>
Reviewed-by: Daniel Jordan <daniel.m.jordan@oracle.com>
Reviewed-by: Bob Picco <bob.picco@oracle.com>
---
arch/x86/mm/kasan_init_64.c | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/arch/x86/mm/kasan_init_64.c b/arch/x86/mm/kasan_init_64.c
index 02c9d7553409..7d06cf0b0b6e 100644
--- a/arch/x86/mm/kasan_init_64.c
+++ b/arch/x86/mm/kasan_init_64.c
@@ -84,6 +84,28 @@ static struct notifier_block kasan_die_notifier = {
};
#endif
+/*
+ * Memory that was allocated by vmemmap_populate is not zeroed, so we must
+ * zero it here explicitly.
+ */
+static void
+zero_vemmap_populated_memory(void)
+{
+ u64 i, start, end;
+
+ for (i = 0; i < E820_MAX_ENTRIES && pfn_mapped[i].end; i++) {
+ void *kaddr_start = pfn_to_kaddr(pfn_mapped[i].start);
+ void *kaddr_end = pfn_to_kaddr(pfn_mapped[i].end);
+
+ start = (u64)kasan_mem_to_shadow(kaddr_start);
+ end = (u64)kasan_mem_to_shadow(kaddr_end);
+ memset((void *)start, 0, end - start);
+ }
+ start = (u64)kasan_mem_to_shadow(_stext);
+ end = (u64)kasan_mem_to_shadow(_end);
+ memset((void *)start, 0, end - start);
+}
+
void __init kasan_early_init(void)
{
int i;
@@ -156,6 +178,13 @@ void __init kasan_init(void)
pte_t pte = __pte(__pa(kasan_zero_page) | __PAGE_KERNEL_RO);
set_pte(&kasan_zero_pte[i], pte);
}
+
+ /*
+ * vmemmap_populate does not zero the memory, so we need to zero it
+ * explicitly
+ */
+ zero_vemmap_populated_memory();
+
/* Flush TLBs again to be sure that write protection applied. */
__flush_tlb_all();
--
2.13.3
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[v4 00/15] complete deferred page initialization Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-02 22:40 +0200 [v4 14/15] mm: optimize early system hash allocations Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-02 22:40 +0200 [v4 03/15] sparc64/mm: setting fields in deferred pages Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-02 22:50 +0200 [v4 06/15] sparc64: simplify vmemmap_populate Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-02 22:50 +0200 [v4 01/15] x86/mm: reserve only exiting low pages Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-02 22:50 +0200 [v4 02/15] x86/mm: setting fields in deferred pages Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-02 22:50 +0200 [v4 15/15] mm: debug for raw alloctor Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-02 22:50 +0200 [v4 09/15] sparc64: optimized struct page zeroing Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-02 22:50 +0200 [v4 12/15] mm: explicitly zero pagetable memory Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-02 22:50 +0200 [v4 10/15] x86/kasan: explicitly zero kasan shadow memory Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-02 22:50 +0200 [v4 04/15] mm: discard memblock data later Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-02 22:50 +0200 [v4 08/15] mm: zero struct pages during initialization Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-02 22:50 +0200 [v4 11/15] arm64/kasan: explicitly zero kasan shadow memory Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-02 22:50 +0200 [v4 07/15] mm: defining memblock_virt_alloc_try_nid_raw Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-02 22:50 +0200 [v4 05/15] mm: don't accessed uninitialized struct pages Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-02 22:50 +0200
csiph-web