[PATCH] spi: qpic-snand: free OOB buffer with ECC context

From: Pengpeng Hou

Date: Tue Jun 16 2026 - 11:15:53 EST


qcom_spi_ecc_init_ctx_pipelined() allocates qspi->oob_buf as part of the
pipelined ECC context setup. The buffer is then used by the raw and ECC
page I/O paths through the NAND ECC context.

The matching cleanup callback only frees the qpic_ecc structure, and the
init error path also skips the OOB buffer after it has been allocated.
Free qspi->oob_buf on both paths and clear the pointer so the ECC context
teardown owns all resources allocated during init.

Signed-off-by: Pengpeng Hou <pengpeng@xxxxxxxxxxx>
---
drivers/spi/spi-qpic-snand.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/spi/spi-qpic-snand.c b/drivers/spi/spi-qpic-snand.c
index 66f2d1b78ade..6cc53586b8a8 100644
--- a/drivers/spi/spi-qpic-snand.c
+++ b/drivers/spi/spi-qpic-snand.c
@@ -394,14 +394,19 @@ static int qcom_spi_ecc_init_ctx_pipelined(struct nand_device *nand)
return 0;

err_free_ecc_cfg:
+ kfree(snandc->qspi->oob_buf);
+ snandc->qspi->oob_buf = NULL;
kfree(ecc_cfg);
return ret;
}

static void qcom_spi_ecc_cleanup_ctx_pipelined(struct nand_device *nand)
{
+ struct qcom_nand_controller *snandc = nand_to_qcom_snand(nand);
struct qpic_ecc *ecc_cfg = nand_to_ecc_ctx(nand);

+ kfree(snandc->qspi->oob_buf);
+ snandc->qspi->oob_buf = NULL;
kfree(ecc_cfg);
}

@@ -1645,4 +1650,3 @@ module_platform_driver(qcom_spi_driver);
MODULE_DESCRIPTION("SPI driver for QPIC QSPI cores");
MODULE_AUTHOR("Md Sadre Alam <quic_mdalam@xxxxxxxxxxx>");
MODULE_LICENSE("GPL");
-
--
2.43.0