Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934667AbZLGDyW (ORCPT ); Sun, 6 Dec 2009 22:54:22 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S934617AbZLGDyS (ORCPT ); Sun, 6 Dec 2009 22:54:18 -0500 Received: from zeniv.linux.org.uk ([195.92.253.2]:51494 "EHLO ZenIV.linux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934661AbZLGDyO (ORCPT ); Sun, 6 Dec 2009 22:54:14 -0500 Date: Mon, 07 Dec 2009 03:54:20 +0000 To: linux-arch@vger.kernel.org Subject: [PATCH 15/19] Take arch_mmap_check() into get_unmapped_area() Cc: torvalds@linux-foundation.org, linux-kernel@vger.kernel.org User-Agent: Heirloom mailx 12.4 7/29/08 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-Id: From: Al Viro Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2737 Lines: 91 Signed-off-by: Al Viro --- mm/mmap.c | 14 +++++++++----- mm/mremap.c | 15 +++------------ 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/mm/mmap.c b/mm/mmap.c index fd49f40..e92cbe5 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -932,13 +932,9 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr, if (!(flags & MAP_FIXED)) addr = round_hint_to_min(addr); - error = arch_mmap_check(addr, len, flags); - if (error) - return error; - /* Careful about overflows.. */ len = PAGE_ALIGN(len); - if (!len || len > TASK_SIZE) + if (!len) return -ENOMEM; /* offset overflow? */ @@ -1441,6 +1437,14 @@ get_unmapped_area(struct file *file, unsigned long addr, unsigned long len, unsigned long (*get_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); + unsigned long error = arch_mmap_check(addr, len, flags); + if (error) + return error; + + /* Careful about overflows.. */ + if (len > TASK_SIZE) + return -ENOMEM; + get_area = current->mm->get_unmapped_area; if (file && file->f_op && file->f_op->get_unmapped_area) get_area = file->f_op->get_unmapped_area; diff --git a/mm/mremap.c b/mm/mremap.c index bbbbbf5..8451908 100644 --- a/mm/mremap.c +++ b/mm/mremap.c @@ -27,10 +27,6 @@ #include "internal.h" -#ifndef arch_mmap_check -#define arch_mmap_check(addr, len, flags) (0) -#endif - static pmd_t *get_old_pmd(struct mm_struct *mm, unsigned long addr) { pgd_t *pgd; @@ -366,9 +362,7 @@ static unsigned long mremap_to(unsigned long addr, map_flags = MAP_FIXED; if (vma->vm_flags & VM_MAYSHARE) map_flags |= MAP_SHARED; - ret = arch_mmap_check(new_addr, new_len, map_flags); - if (ret) - goto out1; + ret = get_unmapped_area(vma->vm_file, new_addr, new_len, vma->vm_pgoff + ((addr - vma->vm_start) >> PAGE_SHIFT), map_flags); @@ -388,12 +382,9 @@ out: static int vma_expandable(struct vm_area_struct *vma, unsigned long delta) { unsigned long end = vma->vm_end + delta; - unsigned long max_addr = TASK_SIZE; - if (vma->vm_next) - max_addr = vma->vm_next->vm_start; - if (max_addr < end || end < vma->vm_end) + if (end < vma->vm_end) /* overflow */ return 0; - if (arch_mmap_check(vma->vm_start, end - vma->vm_start, MAP_FIXED)) + if (vma->vm_next && vma->vm_next->vm_start < end) /* intersection */ return 0; if (get_unmapped_area(NULL, vma->vm_start, end - vma->vm_start, 0, MAP_FIXED) & ~PAGE_MASK) -- 1.5.6.5 -- 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/