• Hugh Dickins's avatar
    holepunch: fix mmap_sem i_mutex deadlock · 4879e0df
    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 avatarAdrian Bunk <bunk@stusta.de>
    4879e0df
madvise.c 8.95 KB