| From d4639482160899cba41b1cf43b31fa69c6fde9c6 Mon Sep 17 00:00:00 2001 |
| From: "Alexander.Barabash@dell.com" <Alexander.Barabash@dell.com> |
| Date: Wed, 25 Dec 2019 17:55:30 +0000 |
| Subject: [PATCH] ioat: ioat_alloc_ring() failure handling. |
| |
| commit b0b5ce1010ffc50015eaec72b0028aaae3f526bb upstream. |
| |
| If dma_alloc_coherent() returns NULL in ioat_alloc_ring(), ring |
| allocation must not proceed. |
| |
| Until now, if the first call to dma_alloc_coherent() in |
| ioat_alloc_ring() returned NULL, the processing could proceed, failing |
| with NULL-pointer dereferencing further down the line. |
| |
| Signed-off-by: Alexander Barabash <alexander.barabash@dell.com> |
| Acked-by: Dave Jiang <dave.jiang@intel.com> |
| Link: https://lore.kernel.org/r/75e9c0e84c3345d693c606c64f8b9ab5@x13pwhopdag1307.AMER.DELL.COM |
| Signed-off-by: Vinod Koul <vkoul@kernel.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/dma/ioat/dma.c b/drivers/dma/ioat/dma.c |
| index 1a422a8b43cf..18c011e57592 100644 |
| --- a/drivers/dma/ioat/dma.c |
| +++ b/drivers/dma/ioat/dma.c |
| @@ -377,10 +377,11 @@ ioat_alloc_ring(struct dma_chan *c, int order, gfp_t flags) |
| |
| descs->virt = dma_alloc_coherent(to_dev(ioat_chan), |
| SZ_2M, &descs->hw, flags); |
| - if (!descs->virt && (i > 0)) { |
| + if (!descs->virt) { |
| int idx; |
| |
| for (idx = 0; idx < i; idx++) { |
| + descs = &ioat_chan->descs[idx]; |
| dma_free_coherent(to_dev(ioat_chan), SZ_2M, |
| descs->virt, descs->hw); |
| descs->virt = NULL; |
| -- |
| 2.7.4 |
| |