dmaengine: stm32-dma: Use struct_size() helper
PATCH 1/1 dmaengine: stm32-dma: Use struct_size() helper
One of the more common cases of allocation size calculations is finding the size of a structure that has a zero-sized array at the end, along with memory for some number of elements for that array. For example:
struct stm32_dma_desc {
...
struct stm32_dma_sg_req sg_req[];
};Make use of the struct_size() helper instead of an open-coded version in order to avoid any potential type mistakes.
So, replace the following function:
static struct stm32_dma_desc *stm32_dma_alloc_desc(u32 num_sgs)
{
return kzalloc(sizeof(struct stm32_dma_desc) +
sizeof(struct stm32_dma_sg_req) * num_sgs, GFP_NOWAIT);
}
with:
kzalloc(struct_size(desc, sg_req, num_sgs), GFP_NOWAIT)
This code was detected with the help of Coccinelle.
--- drivers/dma/stm32-dma.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-)
drivers/dma/stm32-dma.c +3 -9
@@ -243,12 +243,6 @@ static void stm32_dma_write(struct stm32_dma_device *dmadev, u32 reg, u32 val)writel_relaxed (val, dmadev->base + reg); } -static struct stm32_dma_desc *stm32_dma_alloc_desc (u32 num_sgs) -{ -return kzalloc (sizeof (struct stm32_dma_desc ) + -sizeof (struct stm32_dma_sg_req ) * num_sgs,GFP_NOWAIT ); -} -static int stm32_dma_get_width (struct stm32_dma_chan *chan,enum dma_slave_buswidth width) {
@@ -853,7 +847,7 @@ static struct dma_async_tx_descriptor *stm32_dma_prep_slave_sg(return NULL ; } - desc =stm32_dma_alloc_desc (sg_len); + desc =kzalloc (struct_size (desc, sg_req, sg_len),GFP_NOWAIT );if (!desc)return NULL ;
@@ -954,7 +948,7 @@ static struct dma_async_tx_descriptor *stm32_dma_prep_dma_cyclic( num_periods = buf_len / period_len; - desc =stm32_dma_alloc_desc (num_periods); + desc =kzalloc (struct_size (desc, sg_req, num_periods),GFP_NOWAIT );if (!desc)return NULL ;
@@ -989,7 +983,7 @@ static struct dma_async_tx_descriptor *stm32_dma_prep_dma_memcpy(int i; num_sgs =DIV_ROUND_UP (len,STM32_DMA_ALIGNED_MAX_DATA_ITEMS ); - desc =stm32_dma_alloc_desc (num_sgs); + desc =kzalloc (struct_size (desc, sg_req, num_sgs),GFP_NOWAIT );if (!desc)return NULL ;
Signature · 1 line
2.23.0
Quoted 21 lines · Gustavo A. R. Silva
One of the more common cases of allocation size calculations is finding the size of a structure that has a zero-sized array at the end, along with memory for some number of elements for that array. For example:
struct stm32_dma_desc { ... struct stm32_dma_sg_req sg_req[]; };Make use of the
struct_size()helper instead of an open-coded version in order to avoid any potential type mistakes.So, replace the following function:
static struct
stm32_dma_desc*stm32_dma_alloc_desc(u32num_sgs)
{
return kzalloc(sizeof(structstm32_dma_desc) +
sizeof(struct stm32_dma_sg_req)*num_sgs,GFP_NOWAIT);
}
Quoted 5 lines
with:
kzalloc(struct_size(desc, sg_req, num_sgs), GFP_NOWAIT)This code was detected with the help of Coccinelle.
Applied, thanks
Signature · 1 line
~Vinod