blk-mq: NULL dereference in __blk_mq_alloc_rq_maps()
Subsystems (2)
PATCH 1/1 blk-mq: NULL dereference in __blk_mq_alloc_rq_maps()
We shouldn't set "set->tags" to NULL here because if we return -ENOMEM here then we call the function a second time. On the second time through the loop then the statement:
set->tags[i] = blk_mq_init_rq_map(set, i);
will Oops. Also it is a memory leak and a layering violation. There is a correct call to kfree(set->tags) in blk_mq_alloc_tag_set().
Fixes a516440542af ('blk-mq: scale depth and rq map appropriate if low on memory')
Signed-off-by Dan Carpenter <[email protected]>
block/blk-mq.c +0 -1
@@ -1961,7 +1961,6 @@ out_unwind:while (--i >=0 )blk_mq_free_rq_map (set, set->tags[i], i); - set->tags =NULL ;return -ENOMEM ; }