]> git.karo-electronics.de Git - karo-tx-linux.git/commit
zram: use zram->lock to protect zram_free_page() in swap free notify path
authorJiang Liu <liuj97@gmail.com>
Thu, 6 Jun 2013 16:07:23 +0000 (00:07 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 12 Aug 2013 01:35:23 +0000 (18:35 -0700)
commit6349a112f4059ab32c1bb2fb644a2e63a620aeb5
treebe2ca0e5dec42c6840af02da9234c58ce776b962
parentb74c38d5b6af46482480f6f8b83633e2971a0ed8
zram: use zram->lock to protect zram_free_page() in swap free notify path

commit 57ab048532c0d975538cebd4456491b5c34248f4 upstream.

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: Jiang Liu <jiang.liu@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/zram/zram_drv.c
drivers/staging/zram/zram_drv.h