Hi On Fri, Aug 1, 2025 at 11:54 AM Andrew Goodbody <andrew.goodb...@linaro.org> wrote:
> In init_nand_dma there was code to detect failure to allocate memory but > it had two problems. Firstly the 2nd clause when info->tx_desc was NULL > attempted to free info->tx_desc when it should be freeing info->rx_desc. > Secondly there was no detection of both allocations failing, arguably > the more likely scenario. Refactor the code to simplify it and just fail > as soon as either allocation fails. > > This issue was found by Smatch. > > Signed-off-by: Andrew Goodbody <andrew.goodb...@linaro.org> > --- > drivers/mtd/nand/raw/cortina_nand.c | 11 +++++------ > 1 file changed, 5 insertions(+), 6 deletions(-) > > diff --git a/drivers/mtd/nand/raw/cortina_nand.c > b/drivers/mtd/nand/raw/cortina_nand.c > index 06918a46e93..a27a6994f56 100644 > --- a/drivers/mtd/nand/raw/cortina_nand.c > +++ b/drivers/mtd/nand/raw/cortina_nand.c > @@ -186,14 +186,13 @@ int init_nand_dma(struct nand_chip *nand) > > info->tx_desc = malloc_cache_aligned((sizeof(struct > tx_descriptor_t) * > CA_DMA_DESC_NUM)); > - info->rx_desc = malloc_cache_aligned((sizeof(struct > rx_descriptor_t) * > - CA_DMA_DESC_NUM)); > - > - if (!info->rx_desc && info->tx_desc) { > + if (!info->tx_desc) { > printf("Fail to alloc DMA descript!\n"); > - kfree(info->tx_desc); > return -ENOMEM; > - } else if (info->rx_desc && !info->tx_desc) { > + } > + info->rx_desc = malloc_cache_aligned((sizeof(struct > rx_descriptor_t) * > + CA_DMA_DESC_NUM)); > + if (!info->rx_desc) { > printf("Fail to alloc DMA descript!\n"); > kfree(info->tx_desc); > return -ENOMEM; > > Reviewed-by: Michael Trimarchi <mich...@amarulasolutions.com> > -- > 2.39.5 > > -- Michael Nazzareno Trimarchi Co-Founder & Chief Executive Officer M. +39 347 913 2170 mich...@amarulasolutions.com __________________________________ Amarula Solutions BV Joop Geesinkweg 125, 1114 AB, Amsterdam, NL T. +31 (0)85 111 9172 i...@amarulasolutions.com www.amarulasolutions.com