summaryrefslogtreecommitdiffstats
path: root/mm/mremap.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2011-05-02 10:41:40 +0200
committerTakashi Iwai <tiwai@suse.de>2011-05-02 10:41:40 +0200
commita3ea8e8f2474c35b4c3e22262991afddb93c4c0e (patch)
tree648bbeea304950d02e71863673be8154a5e491f6 /mm/mremap.c
parentc2de187e5b0f25b572ac1cb6cdf383f16123717d (diff)
parentebb47241ea0eac6a5a23404821a2d62f64c68496 (diff)
downloadlinux-a3ea8e8f2474c35b4c3e22262991afddb93c4c0e.tar.gz
linux-a3ea8e8f2474c35b4c3e22262991afddb93c4c0e.tar.bz2
linux-a3ea8e8f2474c35b4c3e22262991afddb93c4c0e.zip
Merge branch 'fix/hda' into topic/hda
Diffstat (limited to 'mm/mremap.c')
-rw-r--r--mm/mremap.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/mm/mremap.c b/mm/mremap.c
index 1de98d492ddc..a7c1f9f9b941 100644
--- a/mm/mremap.c
+++ b/mm/mremap.c
@@ -277,9 +277,16 @@ static struct vm_area_struct *vma_to_resize(unsigned long addr,
if (old_len > vma->vm_end - addr)
goto Efault;
- if (vma->vm_flags & (VM_DONTEXPAND | VM_PFNMAP)) {
- if (new_len > old_len)
+ /* Need to be careful about a growing mapping */
+ if (new_len > old_len) {
+ unsigned long pgoff;
+
+ if (vma->vm_flags & (VM_DONTEXPAND | VM_PFNMAP))
goto Efault;
+ pgoff = (addr - vma->vm_start) >> PAGE_SHIFT;
+ pgoff += vma->vm_pgoff;
+ if (pgoff + (new_len >> PAGE_SHIFT) < pgoff)
+ goto Einval;
}
if (vma->vm_flags & VM_LOCKED) {