]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mtd: spinand: fix memory leak of ECC engine conf
authorPablo Martin-Gomez <pmartin-gomez@freebox.fr>
Wed, 18 Jun 2025 11:35:16 +0000 (13:35 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 10 Jul 2025 13:57:47 +0000 (15:57 +0200)
[ Upstream commit 6463cbe08b0cbf9bba8763306764f5fd643023e1 ]

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@freebox.fr>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/mtd/nand/spi/core.c

index 2c8685f1f2fa7ff5485216130b0163fbdcce0c7a..80d0112d18fa67b54d89db44195ac7b7db8ee478 100644 (file)
@@ -1271,6 +1271,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);