Messages in this thread | | | Date | Thu, 04 Apr 2013 09:11:53 +0800 | From | Simon Jeons <> | Subject | Re: [PATCH] x86: add phys addr validity check for /dev/mem mmap |
| |
Hi H.Peter, On 04/03/2013 02:48 AM, H. Peter Anvin wrote: > On 04/02/2013 05:28 AM, Frantisek Hrbata wrote: >> diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h >> index d8e8eef..39607c6 100644 >> --- a/arch/x86/include/asm/io.h >> +++ b/arch/x86/include/asm/io.h >> @@ -242,6 +242,10 @@ static inline void flush_write_buffers(void) >> #endif >> } >> >> +#define ARCH_HAS_VALID_PHYS_ADDR_RANGE >> +extern int valid_phys_addr_range(phys_addr_t addr, size_t count); >> +extern int valid_mmap_phys_addr_range(unsigned long pfn, size_t count); >> + >> #endif /* __KERNEL__ */ >> >> extern void native_io_delay(void); >> diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c >> index 845df68..92ec31c 100644 >> --- a/arch/x86/mm/mmap.c >> +++ b/arch/x86/mm/mmap.c >> @@ -31,6 +31,8 @@ >> #include <linux/sched.h> >> #include <asm/elf.h> >> >> +#include "physaddr.h" >> + >> struct __read_mostly va_alignment va_align = { >> .flags = -1, >> }; >> @@ -122,3 +124,14 @@ void arch_pick_mmap_layout(struct mm_struct *mm) >> mm->unmap_area = arch_unmap_area_topdown; >> } >> } >> + >> +int valid_phys_addr_range(phys_addr_t addr, size_t count) >> +{ >> + return addr + count <= __pa(high_memory); >> +} >> + >> +int valid_mmap_phys_addr_range(unsigned long pfn, size_t count) >> +{ >> + resource_size_t addr = (pfn << PAGE_SHIFT) + count; >> + return phys_addr_valid(addr); >> +} >>
Why we consider boot_cpu_data.x86_phys_bits instead of e820 map here?
> > -hpa >
| |