diff options
| author | Peng Fan <[email protected]> | 2026-07-13 21:32:54 +0800 |
|---|---|---|
| committer | Peng Fan <[email protected]> | 2026-07-29 11:15:55 +0800 |
| commit | b95ce3f0945cac05c09a1837ea2401df78d766d4 (patch) | |
| tree | 146b520b0ee5bb494da102ccc6c32b10f08111fe | |
| parent | 67d06fe102712dc07e05bbdf893fc48ba73c86a6 (diff) | |
mmc: sdhci: fix align_buffer memory leak on re-initialization
sdhci_init() allocates a 512KB aligned bounce buffer for controllers
with SDHCI_QUIRK_32BIT_DMA_ADDR. In the non-DM code path, sdhci_init()
is registered as ops->init and called on every mmc_init(). Each call
allocates a new buffer without checking or freeing the previous one,
leaking 512KB per re-initialization.
Fix by guarding the allocation with !host->align_buffer so it only
allocates on the first call.
Reviewed-by: Tanmay Kathpalia <[email protected]>
Signed-off-by: Tanmay Kathpalia <[email protected]>
Signed-off-by: Peng Fan <[email protected]>
| -rw-r--r-- | drivers/mmc/sdhci.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c index 71a6d8ea2f5..962a99cd05a 100644 --- a/drivers/mmc/sdhci.c +++ b/drivers/mmc/sdhci.c @@ -733,7 +733,8 @@ static int sdhci_init(struct mmc *mmc) */ host->force_align_buffer = true; #else - if (host->quirks & SDHCI_QUIRK_32BIT_DMA_ADDR) { + if ((host->quirks & SDHCI_QUIRK_32BIT_DMA_ADDR) && + !host->align_buffer) { host->align_buffer = memalign(8, 512 * 1024); if (!host->align_buffer) { log_err("Aligned buffer alloc failed\n"); |
