[PATCH] mtd: spinand: fix memory leak of ECC engine conf

Pablo MARTIN-GOMEZ pmartin-gomez at freebox.fr
Mon Jun 9 11:02:08 PDT 2025


Memory allocated for the ECC engine conf is not released during spinand
cleanup. Below kmemleak trace is seen for this memory leak:

unreferenced object 0xffffff80064f00e0 (size 8):
   comm "swapper/0", pid 1, jiffies 4294937458
   hex dump (first 8 bytes):
     00 00 00 00 00 00 00 00                          ........
   backtrace (crc 0):
     kmemleak_alloc+0x30/0x40
     __kmalloc_cache_noprof+0x208/0x3c0
     spinand_ondie_ecc_init_ctx+0x114/0x200
     nand_ecc_init_ctx+0x70/0xa8
     nanddev_ecc_engine_init+0xec/0x27c
     spinand_probe+0xa2c/0x1620
     spi_mem_probe+0x130/0x21c
     spi_probe+0xf0/0x170
     really_probe+0x17c/0x6e8
     __driver_probe_device+0x17c/0x21c
     driver_probe_device+0x58/0x180
     __device_attach_driver+0x15c/0x1f8
     bus_for_each_drv+0xec/0x150
     __device_attach+0x188/0x24c
     device_initial_probe+0x10/0x20
     bus_probe_device+0x11c/0x160

Fix the leak by calling nanddev_ecc_engine_cleanup() inside
spinand_cleanup().

Signed-off-by: Pablo Martin-Gomez <pmartin-gomez at freebox.fr>
---
  drivers/mtd/nand/spi/core.c | 1 +
  1 file changed, 1 insertion(+)

diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c
index b1df7f627161..a1877bf46550 100644
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
@@ -1496,6 +1496,7 @@ static void spinand_cleanup(struct spinand_device 
*spinand)
  {
      struct nand_device *nand = spinand_to_nand(spinand);

+    nanddev_ecc_engine_cleanup(nand);
      nanddev_cleanup(nand);
      spinand_manufacturer_cleanup(spinand);
      kfree(spinand->databuf);
-- 
2.43.0




More information about the linux-mtd mailing list