arm: provision page alloc debug support
Equip arm to support ARCH_SUPPORTS_DEBUG_PAGEALLOC and enable it by default. Having this support means all pages freed at buddy level would be marked as read-only and would help catch any scribbling over free page area. Allocated pages mapping attributes is restored to read/write. ARCH_SUPPORTS_DEBUG_PAGEALLOC needs FORCE_PAGES which ensures all kernel mapping are populated with page granularity and it would ensure page level accesses can be rightly configured. Change-Id: I9b23d1fb0b9594cc148b082c104da9a773c26057 Signed-off-by: Shiraz Hashim <shashim@codeaurora.org> Signed-off-by: Charan Teja Reddy <charante@codeaurora.org> Signed-off-by: Vijayanand Jitta <vjitta@codeaurora.org> Signed-off-by: Qingqing Zhou <qqzhou@codeaurora.org>
This commit is contained in:
committed by
Gerrit - the friendly Code Review server
parent
63090e2763
commit
c6a14aa9bf
@@ -92,6 +92,10 @@ config DEBUG_USER
|
|||||||
8 - SIGSEGV faults
|
8 - SIGSEGV faults
|
||||||
16 - SIGBUS faults
|
16 - SIGBUS faults
|
||||||
|
|
||||||
|
config ARCH_SUPPORTS_DEBUG_PAGEALLOC
|
||||||
|
def_bool y
|
||||||
|
depends on FORCE_PAGES
|
||||||
|
|
||||||
config FORCE_PAGES
|
config FORCE_PAGES
|
||||||
bool "Force lowmem to be mapped with 4K pages"
|
bool "Force lowmem to be mapped with 4K pages"
|
||||||
help
|
help
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2014, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2014,2017-2018 The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 and
|
* it under the terms of the GNU General Public License version 2 and
|
||||||
@@ -98,3 +98,19 @@ int set_memory_x(unsigned long addr, int numpages)
|
|||||||
__pgprot(0),
|
__pgprot(0),
|
||||||
__pgprot(L_PTE_XN));
|
__pgprot(L_PTE_XN));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC
|
||||||
|
void __kernel_map_pages(struct page *page, int numpages, int enable)
|
||||||
|
{
|
||||||
|
unsigned long addr;
|
||||||
|
|
||||||
|
if (PageHighMem(page))
|
||||||
|
return;
|
||||||
|
|
||||||
|
addr = (unsigned long) page_address(page);
|
||||||
|
if (enable)
|
||||||
|
set_memory_rw(addr, numpages);
|
||||||
|
else
|
||||||
|
set_memory_ro(addr, numpages);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user