Skip to content

Commit dff2200

Browse files
tititiou36gregkh
authored andcommitted
dmaengine: mcf-edma: Fix a potential un-allocated memory access
commit 0a46781 upstream. When 'mcf_edma' is allocated, some space is allocated for a flexible array at the end of the struct. 'chans' item are allocated, that is to say 'pdata->dma_channels'. Then, this number of item is stored in 'mcf_edma->n_chans'. A few lines later, if 'mcf_edma->n_chans' is 0, then a default value of 64 is set. This ends to no space allocated by devm_kzalloc() because chans was 0, but 64 items are read and/or written in some not allocated memory. Change the logic to define a default value before allocating the memory. Fixes: e7a3ff9 ("dmaengine: fsl-edma: add ColdFire mcf5441x edma support") Signed-off-by: Christophe JAILLET <[email protected]> Link: https://lore.kernel.org/r/f55d914407c900828f6fad3ea5fa791a5f17b9a4.1685172449.git.christophe.jaillet@wanadoo.fr Signed-off-by: Vinod Koul <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent c4f7de3 commit dff2200

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

drivers/dma/mcf-edma.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,13 @@ static int mcf_edma_probe(struct platform_device *pdev)
191191
return -EINVAL;
192192
}
193193

194-
chans = pdata->dma_channels;
194+
if (!pdata->dma_channels) {
195+
dev_info(&pdev->dev, "setting default channel number to 64");
196+
chans = 64;
197+
} else {
198+
chans = pdata->dma_channels;
199+
}
200+
195201
len = sizeof(*mcf_edma) + sizeof(*mcf_chan) * chans;
196202
mcf_edma = devm_kzalloc(&pdev->dev, len, GFP_KERNEL);
197203
if (!mcf_edma)
@@ -203,11 +209,6 @@ static int mcf_edma_probe(struct platform_device *pdev)
203209
mcf_edma->drvdata = &mcf_data;
204210
mcf_edma->big_endian = 1;
205211

206-
if (!mcf_edma->n_chans) {
207-
dev_info(&pdev->dev, "setting default channel number to 64");
208-
mcf_edma->n_chans = 64;
209-
}
210-
211212
mutex_init(&mcf_edma->fsl_edma_mutex);
212213

213214
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);

0 commit comments

Comments
 (0)