Messages in this thread |  | | | Subject | Re: [PATCH] [2/31] CPA: Do a simple self test at boot | | From | Harvey Harrison <> | | Date | Tue, 15 Jan 2008 00:47:37 -0800 |
| |
On Mon, 2008-01-14 at 23:16 +0100, Andi Kleen wrote: > When CONFIG_DEBUG_RODATA is enabled undo the ro mapping and redo it again. > This gives some simple testing for change_page_attr() > > Optional patch, but I find it useful. > > Signed-off-by: Andi Kleen <ak@suse.de> > > --- > arch/x86/Kconfig.debug | 5 +++++ > arch/x86/mm/init_32.c | 26 ++++++++++++++++++++++++++ > arch/x86/mm/init_64.c | 10 ++++++++++ > 3 files changed, 41 insertions(+) > > Index: linux/arch/x86/mm/init_64.c > =================================================================== > --- linux.orig/arch/x86/mm/init_64.c > +++ linux/arch/x86/mm/init_64.c > @@ -603,6 +603,16 @@ void mark_rodata_ro(void) > * of who is the culprit. > */ > global_flush_tlb();
global_flush_tlb outside CONFIG_CPA_DEBUG here.
> + > +#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 > > Index: linux/arch/x86/mm/init_32.c > =================================================================== > --- linux.orig/arch/x86/mm/init_32.c > +++ linux/arch/x86/mm/init_32.c > @@ -793,6 +793,20 @@ void mark_rodata_ro(void) > change_page_attr(virt_to_page(start), > size >> PAGE_SHIFT, PAGE_KERNEL_RX); > printk("Write protecting the kernel text: %luk\n", size >> 10); > + > +#ifdef CONFIG_CPA_DEBUG > + global_flush_tlb(); > +
global_flush_tlb inside CONFIG_CPA_DEBUG here.
> + 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 > start += size; > @@ -809,6 +823,18 @@ void mark_rodata_ro(void) > * of who is the culprit. > */ > global_flush_tlb();
global_flush_tlb outside CONFIG_CPA_DEBUG here. Intentional?
> + > +#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
Cheers,
Harvey
|  |