Add checks to insure that virtual addresses are not used in invalid contexts. Signed-off-by: Christoph Lameter --- arch/x86/mm/ioremap.c | 15 +++++++-------- include/asm-x86/page_32.h | 7 ++++++- 2 files changed, 13 insertions(+), 9 deletions(-) Index: linux-2.6/arch/x86/mm/ioremap.c =================================================================== --- linux-2.6.orig/arch/x86/mm/ioremap.c 2008-05-07 16:27:09.792659191 -0700 +++ linux-2.6/arch/x86/mm/ioremap.c 2008-05-07 19:46:34.733509101 -0700 @@ -21,29 +21,28 @@ #include #include -#ifdef CONFIG_X86_64 +#if defined(CONFIG_DEBUG_VM) || defined(CONFIG_X86_64) unsigned long __phys_addr(unsigned long x) { + VM_BUG_ON(is_vmalloc_addr((void *)x)); +#ifdef CONFIG_X86_64 if (x >= __START_KERNEL_map) return x - __START_KERNEL_map + phys_base; +#endif return x - PAGE_OFFSET; } EXPORT_SYMBOL(__phys_addr); +#endif static inline int phys_addr_valid(unsigned long addr) { +#ifdef CONFIG_X86_64 return addr < (1UL << boot_cpu_data.x86_phys_bits); -} - #else - -static inline int phys_addr_valid(unsigned long addr) -{ return 1; -} - #endif +} int page_is_ram(unsigned long pagenr) { Index: linux-2.6/include/asm-x86/page_32.h =================================================================== --- linux-2.6.orig/include/asm-x86/page_32.h 2008-05-07 16:27:12.191419001 -0700 +++ linux-2.6/include/asm-x86/page_32.h 2008-05-07 19:30:46.444980299 -0700 @@ -64,7 +64,12 @@ typedef struct page *pgtable_t; #endif #ifndef __ASSEMBLY__ -#define __phys_addr(x) ((x) - PAGE_OFFSET) +#ifdef CONFIG_DEBUG_VM +unsigned long __phys_addr(unsigned long x) +#else +#define __phys_addr(x) ((x) - PAGE_OFFSET) +#endif + #define __phys_reloc_hide(x) RELOC_HIDE((x), 0) #ifdef CONFIG_FLATMEM -- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/