diff options
author | Rik van Riel <riel@redhat.com> | 2010-04-26 12:33:03 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-04-27 11:26:51 -0400 |
commit | 5892753383090a3eddf0e1b043c95e3b2c7feda5 (patch) | |
tree | f1a1d3b449f275dd34ba34208704e92900032f9b /mm | |
parent | a231a1f2714ce3b28445ac512a556d6c95517dab (diff) |
mmap: check ->vm_ops before dereferencing
Check whether the VMA has a vm_ops before calling close, just
like we check vm_ops before calling open a few dozen lines
higher up in the function.
Signed-off-by: Rik van Riel <riel@redhat.com>
Reported-by: Dan Carpenter <error27@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/mmap.c | 3 |
1 files changed, 2 insertions, 1 deletions
@@ -1977,7 +1977,8 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, | |||
1977 | return 0; | 1977 | return 0; |
1978 | 1978 | ||
1979 | /* Clean everything up if vma_adjust failed. */ | 1979 | /* Clean everything up if vma_adjust failed. */ |
1980 | new->vm_ops->close(new); | 1980 | if (new->vm_ops && new->vm_ops->close) |
1981 | new->vm_ops->close(new); | ||
1981 | if (new->vm_file) { | 1982 | if (new->vm_file) { |
1982 | if (vma->vm_flags & VM_EXECUTABLE) | 1983 | if (vma->vm_flags & VM_EXECUTABLE) |
1983 | removed_exe_file_vma(mm); | 1984 | removed_exe_file_vma(mm); |