Message ID | 1419269826-12552-1-git-send-email-Larry.Finger@lwfinger.net (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Kalle Valo |
Headers | show |
Is this really the same behavior as 3.17? In 3.17, allocating the new skb is one of the first things the interrupt handler does, and if that fails it drops the packet and keeps using the old skb. In this proposal, it's only after the packet has been received and the old skb has been freed that a new one is allocated. And if that fails --- well, what are you expecting to happen exactly? -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c index 846a2e6..55334ca 100644 --- a/drivers/net/wireless/rtlwifi/pci.c +++ b/drivers/net/wireless/rtlwifi/pci.c @@ -912,13 +912,15 @@ static void _rtl_pci_rx_interrupt(struct ieee80211_hw *hw) } end: if (rtlpriv->use_new_trx_flow) { - _rtl_pci_init_one_rxdesc(hw, (u8 *)buffer_desc, - rxring_idx, - rtlpci->rx_ring[rxring_idx].idx); + if (!_rtl_pci_init_one_rxdesc(hw, (u8 *)buffer_desc, + rxring_idx, + rtlpci->rx_ring[rxring_idx].idx)) + return; } else { - _rtl_pci_init_one_rxdesc(hw, (u8 *)pdesc, rxring_idx, - rtlpci->rx_ring[rxring_idx].idx); - + if (!_rtl_pci_init_one_rxdesc(hw, (u8 *)pdesc, + rxring_idx, + rtlpci->rx_ring[rxring_idx].idx)) + return; if (rtlpci->rx_ring[rxring_idx].idx == rtlpci->rxringcount - 1) rtlpriv->cfg->ops->set_desc(hw, (u8 *)pdesc,
Under heavy memory pressure, it is possible for the allocation of a new skb to fail. When this happens, the kernel gets a memory access violation. Previous versions of the drivers would drop the read request; however, this logic was missed in the 3.18 update. This patch restores the previous behavior. Reported-by: Eric Biggers <ebiggers3@gmail.com> Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> Cc: Eric Biggers <ebiggers3@gmail.com> Cc: Stable <stable@vger.kernel.org> [3.18] --- drivers/net/wireless/rtlwifi/pci.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)