mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 10:00:17 +00:00
dw-axi-dmac-platform: Avoid trampling with zero length buffer
This code: for_each_sg(sgl, sg, sg_len, i) num_sgs += DIV_ROUND_UP(sg_dma_len(sg), axi_block_len); determines how many hw_desc are allocated. If sg_dma_len(sg)=0 we don't allocate for this sgl. However in the next loop, we will increment loop for this case, and loop gets higher than num_sgs and we trample memory. Signed-off-by: Dom Cobley <popcornmix@gmail.com>
This commit is contained in:
@@ -963,6 +963,9 @@ dw_axi_dma_chan_prep_slave_sg(struct dma_chan *dchan, struct scatterlist *sgl,
|
|||||||
mem = sg_dma_address(sg);
|
mem = sg_dma_address(sg);
|
||||||
len = sg_dma_len(sg);
|
len = sg_dma_len(sg);
|
||||||
num_segments = DIV_ROUND_UP(sg_dma_len(sg), axi_block_len);
|
num_segments = DIV_ROUND_UP(sg_dma_len(sg), axi_block_len);
|
||||||
|
if (!num_segments)
|
||||||
|
continue;
|
||||||
|
|
||||||
segment_len = DIV_ROUND_UP(sg_dma_len(sg), num_segments);
|
segment_len = DIV_ROUND_UP(sg_dma_len(sg), num_segments);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|||||||
Reference in New Issue
Block a user