lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 17 Jul 2014 14:39:09 -0500 From: Robert Elliott <elliott@...com> To: axboe@...nel.dk, abhijit.mahajan@...gotech.com, kmo@...arainc.com, nagalakshmi.nandigama@...gotech.com, asamymuthupa@...ron.com, snitzer@...hat.com, JBottomley@...allels.com, relliott@...rdog.cce.hp.com, sreekanth.reddy@...gotech.com, praveen.krishnamoorthy@...gotech.com, agordeev@...hat.com, scameron@...rdog.cce.hp.com, tom.leiming@...il.com, elliott@...com, sbradshaw@...ron.com, hch@....de, m@...rling.me Cc: linux-kernel@...r.kernel.org, linux-scsi@...r.kernel.org Subject: [PATCH 1/3] blk-mq: cleanup after blk_mq_init_rq_map failures In blk-mq.c blk_mq_alloc_tag_set, if: set->tags = kmalloc_node() succeeds, but one of the blk_mq_init_rq_map() calls fails, goto out_unwind; needs to free set->tags so the caller is not obligated to do so. None of the current callers (null_blk, virtio_blk, virtio_blk, or the forthcoming scsi-mq) do so. set->tags needs to be set to NULL after doing so, so other tag cleanup logic doesn't try to free a stale pointer later. Also set it to NULL in blk_mq_free_tag_set. Tested with error injection on the forthcoming scsi-mq + hpsa combination. Signed-off-by: Robert Elliott <elliott@...com> --- block/blk-mq.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/block/blk-mq.c b/block/blk-mq.c index ad69ef6..4a24b97 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -1996,6 +1996,8 @@ int blk_mq_alloc_tag_set(struct blk_mq_tag_set *set) out_unwind: while (--i >= 0) blk_mq_free_rq_map(set, set->tags[i], i); + kfree(set->tags); + set->tags = NULL; out: return -ENOMEM; } @@ -2011,6 +2013,7 @@ void blk_mq_free_tag_set(struct blk_mq_tag_set *set) } kfree(set->tags); + set->tags = NULL; } EXPORT_SYMBOL(blk_mq_free_tag_set); -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists