| From foo@baz Sun Nov 22 12:00:04 PM CET 2020 |
| From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> |
| Date: Mon, 16 Nov 2020 17:21:14 +0100 |
| Subject: atm: nicstar: Unmap DMA on send error |
| |
| From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> |
| |
| [ Upstream commit 6dceaa9f56e22d0f9b4c4ad2ed9e04e315ce7fe5 ] |
| |
| The `skb' is mapped for DMA in ns_send() but does not unmap DMA in case |
| push_scqe() fails to submit the `skb'. The memory of the `skb' is |
| released so only the DMA mapping is leaking. |
| |
| Unmap the DMA mapping in case push_scqe() failed. |
| |
| Fixes: 864a3ff635fa7 ("atm: [nicstar] remove virt_to_bus() and support 64-bit platforms") |
| Cc: Chas Williams <3chas3@gmail.com> |
| Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/atm/nicstar.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/drivers/atm/nicstar.c |
| +++ b/drivers/atm/nicstar.c |
| @@ -1705,6 +1705,8 @@ static int ns_send(struct atm_vcc *vcc, |
| |
| if (push_scqe(card, vc, scq, &scqe, skb) != 0) { |
| atomic_inc(&vcc->stats->tx_err); |
| + dma_unmap_single(&card->pcidev->dev, NS_PRV_DMA(skb), skb->len, |
| + DMA_TO_DEVICE); |
| dev_kfree_skb_any(skb); |
| return -EIO; |
| } |