Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e4c8b456 authored by Jia-Ju Bai's avatar Jia-Ju Bai Committed by Kalle Valo
Browse files

rtl818x_pci: Fix a memory leak in rtl8180_init_rx_ring



When dev_alloc_skb or pci_dma_mapping_error in rtl8180_init_rx_ring fails,
the memory allocated by pci_zalloc_consistent is not freed.

This patch fixes the bug by adding pci_free_consistent
in error handling code.

Signed-off-by: default avatarJia-Ju Bai <baijiaju1990@163.com>
Signed-off-by: default avatarJulian Calaby <julian.calaby@gmail.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 06d05463
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -1018,6 +1018,8 @@ static int rtl8180_init_rx_ring(struct ieee80211_hw *dev)
		dma_addr_t *mapping;
		dma_addr_t *mapping;
		entry = priv->rx_ring + priv->rx_ring_sz*i;
		entry = priv->rx_ring + priv->rx_ring_sz*i;
		if (!skb) {
		if (!skb) {
			pci_free_consistent(priv->pdev, priv->rx_ring_sz * 32,
					priv->rx_ring, priv->rx_ring_dma);
			wiphy_err(dev->wiphy, "Cannot allocate RX skb\n");
			wiphy_err(dev->wiphy, "Cannot allocate RX skb\n");
			return -ENOMEM;
			return -ENOMEM;
		}
		}
@@ -1028,6 +1030,8 @@ static int rtl8180_init_rx_ring(struct ieee80211_hw *dev)


		if (pci_dma_mapping_error(priv->pdev, *mapping)) {
		if (pci_dma_mapping_error(priv->pdev, *mapping)) {
			kfree_skb(skb);
			kfree_skb(skb);
			pci_free_consistent(priv->pdev, priv->rx_ring_sz * 32,
					priv->rx_ring, priv->rx_ring_dma);
			wiphy_err(dev->wiphy, "Cannot map DMA for RX skb\n");
			wiphy_err(dev->wiphy, "Cannot map DMA for RX skb\n");
			return -ENOMEM;
			return -ENOMEM;
		}
		}