diff options
author | Takashi Iwai <tiwai@suse.de> | 2011-05-02 10:41:40 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2011-05-02 10:41:40 +0200 |
commit | a3ea8e8f2474c35b4c3e22262991afddb93c4c0e (patch) | |
tree | 648bbeea304950d02e71863673be8154a5e491f6 /mm/mremap.c | |
parent | c2de187e5b0f25b572ac1cb6cdf383f16123717d (diff) | |
parent | ebb47241ea0eac6a5a23404821a2d62f64c68496 (diff) | |
download | linux-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.c | 11 |
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) { |