c_p_a(): do a simple self test at boot
When CONFIG_DEBUG_RODATA is enabled undo the ro mapping and redo it again. This gives some simple testing for change_page_attr(). Signed-off-by: Andi Kleen <ak@suse.de> Acked-by: Jan Beulich <jbeulich@novell.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
b4416a1be8
commit
0c42f39276
|
@ -204,4 +204,9 @@ config DEBUG_BOOT_PARAMS
|
||||||
help
|
help
|
||||||
This option will cause struct boot_params to be exported via debugfs.
|
This option will cause struct boot_params to be exported via debugfs.
|
||||||
|
|
||||||
|
config CPA_DEBUG
|
||||||
|
bool "CPA self test code"
|
||||||
|
help
|
||||||
|
Do change_page_attr self tests at boot.
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
|
@ -799,6 +799,20 @@ void mark_rodata_ro(void)
|
||||||
change_page_attr(virt_to_page(start),
|
change_page_attr(virt_to_page(start),
|
||||||
size >> PAGE_SHIFT, PAGE_KERNEL_RX);
|
size >> PAGE_SHIFT, PAGE_KERNEL_RX);
|
||||||
printk("Write protecting the kernel text: %luk\n", size >> 10);
|
printk("Write protecting the kernel text: %luk\n", size >> 10);
|
||||||
|
|
||||||
|
#ifdef CONFIG_CPA_DEBUG
|
||||||
|
global_flush_tlb();
|
||||||
|
|
||||||
|
printk("Testing CPA: Reverting %lx-%lx\n", start, start+size);
|
||||||
|
change_page_attr(virt_to_page(start), size>>PAGE_SHIFT,
|
||||||
|
PAGE_KERNEL_EXEC);
|
||||||
|
global_flush_tlb();
|
||||||
|
|
||||||
|
printk("Testing CPA: write protecting again\n");
|
||||||
|
change_page_attr(virt_to_page(start), size>>PAGE_SHIFT,
|
||||||
|
PAGE_KERNEL_RX);
|
||||||
|
global_flush_tlb();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
start += size;
|
start += size;
|
||||||
|
@ -815,6 +829,18 @@ void mark_rodata_ro(void)
|
||||||
* of who is the culprit.
|
* of who is the culprit.
|
||||||
*/
|
*/
|
||||||
global_flush_tlb();
|
global_flush_tlb();
|
||||||
|
|
||||||
|
#ifdef CONFIG_CPA_DEBUG
|
||||||
|
printk("Testing CPA: undo %lx-%lx\n", start, start + size);
|
||||||
|
change_page_attr(virt_to_page(start), size >> PAGE_SHIFT,
|
||||||
|
PAGE_KERNEL);
|
||||||
|
global_flush_tlb();
|
||||||
|
|
||||||
|
printk("Testing CPA: write protecting again\n");
|
||||||
|
change_page_attr(virt_to_page(start), size >> PAGE_SHIFT,
|
||||||
|
PAGE_KERNEL_RO);
|
||||||
|
global_flush_tlb();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -606,6 +606,16 @@ void mark_rodata_ro(void)
|
||||||
* of who is the culprit.
|
* of who is the culprit.
|
||||||
*/
|
*/
|
||||||
global_flush_tlb();
|
global_flush_tlb();
|
||||||
|
|
||||||
|
#ifdef CONFIG_CPA_DEBUG
|
||||||
|
printk("Testing CPA: undo %lx-%lx\n", start, end);
|
||||||
|
change_page_attr_addr(start, (end - start) >> PAGE_SHIFT, PAGE_KERNEL);
|
||||||
|
global_flush_tlb();
|
||||||
|
|
||||||
|
printk("Testing CPA: again\n");
|
||||||
|
change_page_attr_addr(start, (end - start) >> PAGE_SHIFT, PAGE_KERNEL_RO);
|
||||||
|
global_flush_tlb();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue