Commit 293a6e8e authored by Matias Bjørling's avatar Matias Bjørling Committed by Jens Axboe

lightnvm: fix out of bound ppa lun id on bb tbl

The ppa configured for retrieving the bad block table uses the internal
lun id to setup the get bad block ppa. This increases monotonically
with the number luns available. When configuring a ppa, the channel and
lun must be specified separately, leading to an out of bound memory
access in gennvm_block_bb when lun id goes beyond the luns available
within a channel.

Additional, remove out of bound check in gennvm_block_bb(), as it was a
buggy to begin with.
Signed-off-by: default avatarMatias Bjørling <m@bjorling.me>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 00ee6cc3
...@@ -148,11 +148,6 @@ static int gennvm_block_bb(struct gen_nvm *gn, struct ppa_addr ppa, ...@@ -148,11 +148,6 @@ static int gennvm_block_bb(struct gen_nvm *gn, struct ppa_addr ppa,
continue; continue;
blk = &lun->vlun.blocks[i]; blk = &lun->vlun.blocks[i];
if (!blk) {
pr_err("gennvm: BB data is out of bounds.\n");
return -EINVAL;
}
list_move_tail(&blk->list, &lun->bb_list); list_move_tail(&blk->list, &lun->bb_list);
lun->vlun.nr_bad_blocks++; lun->vlun.nr_bad_blocks++;
lun->vlun.nr_free_blocks--; lun->vlun.nr_free_blocks--;
...@@ -257,7 +252,7 @@ static int gennvm_blocks_init(struct nvm_dev *dev, struct gen_nvm *gn) ...@@ -257,7 +252,7 @@ static int gennvm_blocks_init(struct nvm_dev *dev, struct gen_nvm *gn)
ppa.ppa = 0; ppa.ppa = 0;
ppa.g.ch = lun->vlun.chnl_id; ppa.g.ch = lun->vlun.chnl_id;
ppa.g.lun = lun->vlun.id; ppa.g.lun = lun->vlun.lun_id;
ret = nvm_get_bb_tbl(dev, ppa, blks); ret = nvm_get_bb_tbl(dev, ppa, blks);
if (ret) if (ret)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment