Skip to content

Commit

Permalink
dm: do not reuse dm_blk_ioctl block_device input as local variable
Browse files Browse the repository at this point in the history
(Ab)using the @bdev passed to dm_blk_ioctl() opens the potential for
targets' .prepare_ioctl to fail if they go on to check the bdev for
!NULL.

Fixes: e56f81e ("dm: refactor ioctl handling")
Reported-by: Junichi Nomura <j-nomura@ce.jp.nec.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
  • Loading branch information
Mike Snitzer committed Nov 17, 2015
1 parent 5bbbfdf commit 647a20d
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions drivers/md/dm.c
Original file line number Diff line number Diff line change
Expand Up @@ -603,9 +603,10 @@ static int dm_blk_ioctl(struct block_device *bdev, fmode_t mode,
{
struct mapped_device *md = bdev->bd_disk->private_data;
struct dm_target *tgt;
struct block_device *tgt_bdev = NULL;
int srcu_idx, r;

r = dm_get_live_table_for_ioctl(md, &tgt, &bdev, &mode, &srcu_idx);
r = dm_get_live_table_for_ioctl(md, &tgt, &tgt_bdev, &mode, &srcu_idx);
if (r < 0)
return r;

Expand All @@ -620,7 +621,7 @@ static int dm_blk_ioctl(struct block_device *bdev, fmode_t mode,
goto out;
}

r = __blkdev_driver_ioctl(bdev, mode, cmd, arg);
r = __blkdev_driver_ioctl(tgt_bdev, mode, cmd, arg);
out:
dm_put_live_table(md, srcu_idx);
return r;
Expand Down

0 comments on commit 647a20d

Please sign in to comment.