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

Commit 6633d649 authored by Mike McCormack's avatar Mike McCormack Committed by John W. Linville
Browse files

rtlwifi: Avoid modifying skbs that are resubmitted



In the case we fail to allocate a new skb, the old skb should
be resubmitted unmodified.

Fixes bug introduced in a9e12869.

Signed-off-by: default avatarMike McCormack <mikem@ring3k.org>
Acked-by: default avatarLarry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 4fea2e0e
Loading
Loading
Loading
Loading
+13 −15
Original line number Diff line number Diff line
@@ -669,6 +669,19 @@ static void _rtl_pci_rx_interrupt(struct ieee80211_hw *hw)
							 &rx_status,
							 (u8 *) pdesc, skb);

			new_skb = dev_alloc_skb(rtlpci->rxbuffersize);
			if (unlikely(!new_skb)) {
				RT_TRACE(rtlpriv, (COMP_INTR | COMP_RECV),
					 DBG_DMESG,
					 ("can't alloc skb for rx\n"));
				goto done;
			}

			pci_unmap_single(rtlpci->pdev,
					 *((dma_addr_t *) skb->cb),
					 rtlpci->rxbuffersize,
					 PCI_DMA_FROMDEVICE);

			skb_put(skb, rtlpriv->cfg->ops->get_desc((u8 *) pdesc,
							 false,
							 HW_DESC_RXPKT_LEN));
@@ -685,21 +698,6 @@ static void _rtl_pci_rx_interrupt(struct ieee80211_hw *hw)
			hdr = rtl_get_hdr(skb);
			fc = rtl_get_fc(skb);

			/* try for new buffer - if allocation fails, drop
			 * frame and reuse old buffer
			 */
			new_skb = dev_alloc_skb(rtlpci->rxbuffersize);
			if (unlikely(!new_skb)) {
				RT_TRACE(rtlpriv, (COMP_INTR | COMP_RECV),
					 DBG_DMESG,
					 ("can't alloc skb for rx\n"));
				goto done;
			}
			pci_unmap_single(rtlpci->pdev,
					 *((dma_addr_t *) skb->cb),
					 rtlpci->rxbuffersize,
					 PCI_DMA_FROMDEVICE);

			if (!stats.crc && !stats.hwerror) {
				memcpy(IEEE80211_SKB_RXCB(skb), &rx_status,
				       sizeof(rx_status));