UBI: Fastmap: Fix races in ubi_wl_get_peb()
authorRichard Weinberger <richard@nod.at>
Thu, 2 Oct 2014 13:00:35 +0000 (15:00 +0200)
committerRichard Weinberger <richard@nod.at>
Thu, 26 Mar 2015 20:24:24 +0000 (21:24 +0100)
commitd59f21bebe9d0fda34027ff1afda4f2b0d5f1869
tree4825c6a28771521a6eeff4e926d9b5a39ed7011a
parent399a9feeac83c2f64138c438e41222a12dd71766
UBI: Fastmap: Fix races in ubi_wl_get_peb()

ubi_wl_get_peb() has two problems, it reads the pool
size and usage counters without any protection.
While reading one value would be perfectly fine it reads multiple
values and compares them. This is racy and can lead to incorrect
pool handling.
Furthermore ubi_update_fastmap() is called without wl_lock held,
before incrementing the used counter it needs to be checked again.
It could happen that another thread consumed all PEBs from the
pool and the counter goes beyond ->size.

Signed-off-by: Richard Weinberger <richard@nod.at>
drivers/mtd/ubi/ubi.h
drivers/mtd/ubi/wl.c