diff mbox series

spi: Ensure that sg_table won't be used after being freed

Message ID 20220930113408.19720-1-m.szyprowski@samsung.com (mailing list archive)
State Accepted
Commit 8e9204cddcc3fea9affcfa411715ba4f66e97587
Headers show
Series spi: Ensure that sg_table won't be used after being freed | expand

Commit Message

Marek Szyprowski Sept. 30, 2022, 11:34 a.m. UTC
SPI code checks for non-zero sgt->orig_nents to determine if the buffer
has been DMA-mapped. Ensure that sg_table is really zeroed after free to
avoid potential NULL pointer dereference if the given SPI xfer object is
reused again without being DMA-mapped.

Fixes: 0c17ba73c08f ("spi: Fix cache corruption due to DMA/PIO overlap")
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
---
 drivers/spi/spi.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Mark Brown Sept. 30, 2022, 12:59 p.m. UTC | #1
On Fri, 30 Sep 2022 13:34:08 +0200, Marek Szyprowski wrote:
> SPI code checks for non-zero sgt->orig_nents to determine if the buffer
> has been DMA-mapped. Ensure that sg_table is really zeroed after free to
> avoid potential NULL pointer dereference if the given SPI xfer object is
> reused again without being DMA-mapped.
> 
> 

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next

Thanks!

[1/1] spi: Ensure that sg_table won't be used after being freed
      commit: 8e9204cddcc3fea9affcfa411715ba4f66e97587

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark
diff mbox series

Patch

diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 44e4352d948b..5f9aedd1f0b6 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -1102,6 +1102,8 @@  static void spi_unmap_buf_attrs(struct spi_controller *ctlr,
 	if (sgt->orig_nents) {
 		dma_unmap_sgtable(dev, sgt, dir, attrs);
 		sg_free_table(sgt);
+		sgt->orig_nents = 0;
+		sgt->nents = 0;
 	}
 }