aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/mem.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/char/mem.c')
-rw-r--r--drivers/char/mem.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/char/mem.c b/drivers/char/mem.c
index ce3ff8641191..5b2d18035073 100644
--- a/drivers/char/mem.c
+++ b/drivers/char/mem.c
@@ -101,6 +101,11 @@ static inline int valid_phys_addr_range(unsigned long addr, size_t *count)
101 101
102 return 1; 102 return 1;
103} 103}
104
105static inline int valid_mmap_phys_addr_range(unsigned long addr, size_t *size)
106{
107 return 1;
108}
104#endif 109#endif
105 110
106/* 111/*
@@ -244,15 +249,20 @@ static pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
244 249
245static int mmap_mem(struct file * file, struct vm_area_struct * vma) 250static int mmap_mem(struct file * file, struct vm_area_struct * vma)
246{ 251{
252 size_t size = vma->vm_end - vma->vm_start;
253
254 if (!valid_mmap_phys_addr_range(vma->vm_pgoff << PAGE_SHIFT, &size))
255 return -EINVAL;
256
247 vma->vm_page_prot = phys_mem_access_prot(file, vma->vm_pgoff, 257 vma->vm_page_prot = phys_mem_access_prot(file, vma->vm_pgoff,
248 vma->vm_end - vma->vm_start, 258 size,
249 vma->vm_page_prot); 259 vma->vm_page_prot);
250 260
251 /* Remap-pfn-range will mark the range VM_IO and VM_RESERVED */ 261 /* Remap-pfn-range will mark the range VM_IO and VM_RESERVED */
252 if (remap_pfn_range(vma, 262 if (remap_pfn_range(vma,
253 vma->vm_start, 263 vma->vm_start,
254 vma->vm_pgoff, 264 vma->vm_pgoff,
255 vma->vm_end-vma->vm_start, 265 size,
256 vma->vm_page_prot)) 266 vma->vm_page_prot))
257 return -EAGAIN; 267 return -EAGAIN;
258 return 0; 268 return 0;