Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 069fd16

Browse files
roxellgregkh
authored andcommitted
dmaengine: ti: edma: Fix memory allocation size for queue_priority_map
[ Upstream commit e63419d ] Fix a critical memory allocation bug in edma_setup_from_hw() where queue_priority_map was allocated with insufficient memory. The code declared queue_priority_map as s8 (*)[2] (pointer to array of 2 s8), but allocated memory using sizeof(s8) instead of the correct size. This caused out-of-bounds memory writes when accessing: queue_priority_map[i][0] = i; queue_priority_map[i][1] = i; The bug manifested as kernel crashes with "Oops - undefined instruction" on ARM platforms (BeagleBoard-X15) during EDMA driver probe, as the memory corruption triggered kernel hardening features on Clang. Change the allocation to use sizeof(*queue_priority_map) which automatically gets the correct size for the 2D array structure. Fixes: 2b6b3b7 ("ARM/dmaengine: edma: Merge the two drivers under drivers/dma/") Signed-off-by: Anders Roxell <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Vinod Koul <[email protected]> Signed-off-by: Sasha Levin <[email protected]>
1 parent ec5430d commit 069fd16

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

drivers/dma/ti/edma.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2063,8 +2063,8 @@ static int edma_setup_from_hw(struct device *dev, struct edma_soc_info *pdata,
20632063
* priority. So Q0 is the highest priority queue and the last queue has
20642064
* the lowest priority.
20652065
*/
2066-
queue_priority_map = devm_kcalloc(dev, ecc->num_tc + 1, sizeof(s8),
2067-
GFP_KERNEL);
2066+
queue_priority_map = devm_kcalloc(dev, ecc->num_tc + 1,
2067+
sizeof(*queue_priority_map), GFP_KERNEL);
20682068
if (!queue_priority_map)
20692069
return -ENOMEM;
20702070

0 commit comments

Comments
 (0)