We find the memory use-after-free issue in __blk_drain_queue()
on the kernel 4.14. After read the latest kernel 4.18-rc6 we
think it has the same problem.
Memory is allocated for q->fq in the blk_init_allocated_queue().
If the elevator init function called with error return, it will
run into the fail case to free the q->fq.
Then the __blk_drain_queue() uses the same memory after the free
of the q->fq, it will lead to the unpredictable event.
The patch is to set q->fq as NULL in the fail case of
blk_init_allocated_queue().
Fixes: commit 7c94e1c157a2 ("block: introduce blk_flush_queue to drive flush machinery")
Signed-off-by: xiao jin <jin.xiao(a)intel.com>
Cc: Ming Lei <ming.lei(a)redhat.com>
Cc: Bart Van Assche <bart.vanassche(a)wdc.com>
Cc: <stable(a)vger.kernel.org>
---
block/blk-core.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/block/blk-core.c b/block/blk-core.c
index b888175..52635e2 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -1072,6 +1072,7 @@ int blk_init_allocated_queue(struct request_queue *q)
q->exit_rq_fn(q, q->fq->flush_rq);
out_free_flush_queue:
blk_free_flush_queue(q->fq);
+ q->fq = NULL;
return -ENOMEM;
}
EXPORT_SYMBOL(blk_init_allocated_queue);
--
1.7.9.5
Greg,
building for corgi with gcc7 I notice this single warning:
/drivers/dma/pxa_dma.c:1324:34: warning: duplicate 'const' declaration
specifier [-Wduplicate-decl-specifier] static const struct
of_device_id const pxad_dt_ids[] ...
There was a wrong backport of one patch and pxa_dma was fixed by 4.4.90.
Unfortunately the patch "4e0def8 dmaengine: pxa_dma: remove duplicate
const qualifier" was forgotten.
Thanks
Andrea