• Shijie Luo's avatar
    mm: mempolicy: fix potential pte_unmap_unlock pte error · 5ed0bc2d
    Shijie Luo authored
    [ Upstream commit 3f088420 ]
    
    When flags in queue_pages_pte_range don't have MPOL_MF_MOVE or
    MPOL_MF_MOVE_ALL bits, code breaks and passing origin pte - 1 to
    pte_unmap_unlock seems like not a good idea.
    
    queue_pages_pte_range can run in MPOL_MF_MOVE_ALL mode which doesn't
    migrate misplaced pages but returns with EIO when encountering such a
    page.  Since commit a7f40cfe ("mm: mempolicy: make mbind() return
    -EIO when MPOL_MF_STRICT is specified") and early break on the first pte
    in the range results in pte_unmap_unlock on an underflow pte.  This can
    lead to lockups later on when somebody tries to lock the pte resp.
    page_table_lock again..
    
    Fixes: a7f40cfe
    
     ("mm: mempolicy: make mbind() return -EIO when MPOL_MF_STRICT is specified")
    Signed-off-by: default avatarShijie Luo <luoshijie1@huawei.com>
    Signed-off-by: default avatarMiaohe Lin <linmiaohe@huawei.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Reviewed-by: Oscar Salvador <...
    5ed0bc2d
mempolicy.c 73.4 KB