diff options
| author | Johannes Berg <[email protected]> | 2010-12-22 09:15:07 +0000 |
|---|---|---|
| committer | John W. Linville <[email protected]> | 2010-12-22 18:36:35 +0000 |
| commit | b51aff057c9d0ef6c529dc25fd9f775faf7b6c63 (patch) | |
| tree | 57f268b9553fa77f5a5337fb5be4355c63b44d1b | |
| parent | hostap: remove netif_stop_queue from init (diff) | |
| download | kernel-b51aff057c9d0ef6c529dc25fd9f775faf7b6c63.tar.gz kernel-b51aff057c9d0ef6c529dc25fd9f775faf7b6c63.zip | |
mac80211: fix mesh forwarding
Under memory pressure, the mac80211 mesh code
may helpfully print a message that it failed
to clone a mesh frame and then will proceed
to crash trying to use it anyway. Fix that.
Cc: [email protected] [2.6.27+]
Signed-off-by: Johannes Berg <[email protected]>
Acked-by: Javier Cardona <[email protected]>
Signed-off-by: John W. Linville <[email protected]>
| -rw-r--r-- | net/mac80211/rx.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 54fb4a0e76f0..b01e467b76c6 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c @@ -1788,9 +1788,11 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx) fwd_skb = skb_copy(skb, GFP_ATOMIC); - if (!fwd_skb && net_ratelimit()) + if (!fwd_skb && net_ratelimit()) { printk(KERN_DEBUG "%s: failed to clone mesh frame\n", sdata->name); + goto out; + } fwd_hdr = (struct ieee80211_hdr *) fwd_skb->data; memcpy(fwd_hdr->addr2, sdata->vif.addr, ETH_ALEN); @@ -1828,6 +1830,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx) } } + out: if (is_multicast_ether_addr(hdr->addr1) || sdata->dev->flags & IFF_PROMISC) return RX_CONTINUE; |
