Shared vmemmap tail pages are now installed through vmemmap_pte_populate().
Map those shared pages with PAGE_KERNEL_RO so writes to shared tail vmemmap entries fault immediately instead of silently corrupting shared metadata. Signed-off-by: Muchun Song <[email protected]> --- mm/sparse-vmemmap.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c index 182d0c7dd1e7..9811c92ad258 100644 --- a/mm/sparse-vmemmap.c +++ b/mm/sparse-vmemmap.c @@ -158,7 +158,8 @@ static pte_t * __meminit vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, in if (slab_is_available()) get_page(page); - entry = pfn_pte(page_to_pfn(page), PAGE_KERNEL); + /* Map shared tail page read-only to catch illegal writes. */ + entry = pfn_pte(page_to_pfn(page), PAGE_KERNEL_RO); } else { void *vaddr = vmemmap_alloc_block_buf(PAGE_SIZE, node, altmap); -- 2.54.0
