p54pci: rx frame length check
PATCH 1/1 p54pci: rx frame length check
A long time ago, a user reported several crashes due to data corruptions which are likely the result of a not-100%-supported, or faulty? PCI bridge.
( http://patchwork.kernel.org/patch/53004/ )
This patch fixes entry #1.
"1. p54p_check_rx_ring - skb_over_panic: Under a ping flood or just left running for a bit would panic with a skb_over_panic." As described in the mail: The invalid frame length causes skb_put to bailout and trigger a crash.
Reported-by Quintin Pitts <[email protected]>
Signed-off-by Christian Lamparter <[email protected]>
---
Note:
Simply dropping the frame is problematic, because if its content contains a tx feedback we would lose some portion of the device memory space.... And the driver/mac80211 should handle all other invalid data.
---
drivers/net/wireless/p54/p54pci.c +8 -0
@@ -205,6 +205,14 @@ static void p54p_check_rx_ring(struct ieee80211_hw *dev, u32 *index, i %= ring_limit;continue ; } + +if (unlikely (len > priv->common.rx_mtu)) { +if (net_ratelimit ()) +dev_err (&priv->pdev->dev,"rx'd frame size " +"exceeds length threshold.\n" ); + + len = priv->common.rx_mtu; + }skb_put (skb, len);if (p54_rx (dev, skb)) {