• Jiang Liu's avatar
    zram: use zram->lock to protect zram_free_page() in swap free notify path · 57ab0485
    Jiang Liu authored
    zram_slot_free_notify() is free-running without any protection from
    concurrent operations. So there are race conditions between
    zram_bvec_read()/zram_bvec_write() and zram_slot_free_notify(),
    and possible consequences include:
    1) Trigger BUG_ON(!handle) on zram_bvec_write() side.
    2) Access to freed pages on zram_bvec_read() side.
    3) Break some fields (bad_compress, good_compress, pages_stored)
       in zram->stats if the swap layer makes concurrently call to
       zram_slot_free_notify().
    
    So enhance zram_slot_free_notify() to acquire writer lock on zram->lock
    before calling zram_free_page().
    Signed-off-by: default avatarJiang Liu <jiang.liu@huawei.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    57ab0485
zram_drv.c 16.4 KB