• Hugh Dickins's avatar
    holepunch: fix mmap_sem i_mutex deadlock · 64f586d8
    Hugh Dickins authored
    sys_madvise has down_write of mmap_sem, then madvise_remove calls
    vmtruncate_range which takes i_mutex and i_alloc_sem: no, we can
    easily devise deadlocks from that ordering.
    
    madvise_remove drop mmap_sem while calling vmtruncate_range: luckily,
    since madvise_remove doesn't split or merge vmas, it's easy to handle
    this case with a NULL prev, without restructuring sys_madvise.  (Though
    sad to retake mmap_sem when it's unlikely to be needed, and certainly
    down_read is sufficient for MADV_REMOVE, unlike the other madvices.)
    Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    64f586d8
madvise.c 8.95 KB