summaryrefslogtreecommitdiffstats
path: root/drivers/md
diff options
context:
space:
mode:
authorSergei Shtepa <sergei.shtepa@veeam.com>2020-11-11 15:55:46 +0300
committerMike Snitzer <snitzer@redhat.com>2020-12-01 15:43:37 -0500
commit89478335718c98557f10470a9bc5c555b9261c4e (patch)
treee4243248ed7bea5d95ce51c9eee1e670b9fa0bea /drivers/md
parent35d2835d2ac41dc0b3e3469f8e2b08ce9709ace8 (diff)
downloadlinux-89478335718c98557f10470a9bc5c555b9261c4e.tar.bz2
dm: fix bug with RCU locking in dm_blk_report_zones
The dm_get_live_table() function makes RCU read lock so dm_put_live_table() must be called even if dm_table map is not found. Fixes: e76239a3748c9 ("block: add a report_zones method") Cc: stable@vger.kernel.org Signed-off-by: Sergei Shtepa <sergei.shtepa@veeam.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Diffstat (limited to 'drivers/md')
-rw-r--r--drivers/md/dm.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index c18fc2548518..98866e725f25 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -476,8 +476,10 @@ static int dm_blk_report_zones(struct gendisk *disk, sector_t sector,
return -EAGAIN;
map = dm_get_live_table(md, &srcu_idx);
- if (!map)
- return -EIO;
+ if (!map) {
+ ret = -EIO;
+ goto out;
+ }
do {
struct dm_target *tgt;