• Hugh Dickins's avatar
    [PATCH] general split_vma hugetlb fix · b717da93
    Hugh Dickins authored
    My recent do_munmap hugetlb fix has proved inadequate.  There are
    other places (madvise, mbind, mlock, mprotect) where split_vma is
    called.  Only mprotect excludes a hugetlb vma: the others are in
    danger of splitting at a misaligned address, causing later BUGs.
    
    So move the ~HPAGE_MASK check from do_munmap to split_vma itself;
    and fix up those places (madvise and mlock) which expect split_vma
    can fail only with -ENOMEM, and wish to convert that to -EAGAIN.
    (It appears genuine that some of these syscalls should be failing
    with -ENOMEM and some with -EAGAIN, so respect those behaviours.)
    
    madvise_dontneed doesn't use split_vma, but is equally in danger
    of causing a hugetlb BUG via zap_page_range.  Whereas elsewhere the
    patch is permissive (allowing the operation on a hugetlb vma even when
    pointless, so long as it doesn't missplit it), here we must use -EINVAL
    on any hugetlb vma, since a page fault would hit the BUG in its nopage.
    Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
    Acked-by: default avatarWilliam Irwin <wli@holomorphy.com>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    b717da93
mmap.c 54.3 KB