aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/rx.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/mac80211/rx.c')
-rw-r--r--net/mac80211/rx.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 45aad3d3108c..c2a6da5d80da 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -231,7 +231,7 @@ static void ieee80211_handle_mu_mimo_mon(struct ieee80211_sub_if_data *sdata,
231 struct ieee80211_hdr_3addr hdr; 231 struct ieee80211_hdr_3addr hdr;
232 u8 category; 232 u8 category;
233 u8 action_code; 233 u8 action_code;
234 } __packed action; 234 } __packed __aligned(2) action;
235 235
236 if (!sdata) 236 if (!sdata)
237 return; 237 return;
@@ -2644,6 +2644,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
2644 struct ieee80211_sub_if_data *sdata = rx->sdata; 2644 struct ieee80211_sub_if_data *sdata = rx->sdata;
2645 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; 2645 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
2646 u16 ac, q, hdrlen; 2646 u16 ac, q, hdrlen;
2647 int tailroom = 0;
2647 2648
2648 hdr = (struct ieee80211_hdr *) skb->data; 2649 hdr = (struct ieee80211_hdr *) skb->data;
2649 hdrlen = ieee80211_hdrlen(hdr->frame_control); 2650 hdrlen = ieee80211_hdrlen(hdr->frame_control);
@@ -2723,15 +2724,21 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
2723 skb_set_queue_mapping(skb, q); 2724 skb_set_queue_mapping(skb, q);
2724 2725
2725 if (!--mesh_hdr->ttl) { 2726 if (!--mesh_hdr->ttl) {
2726 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_ttl); 2727 if (!is_multicast_ether_addr(hdr->addr1))
2728 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh,
2729 dropped_frames_ttl);
2727 goto out; 2730 goto out;
2728 } 2731 }
2729 2732
2730 if (!ifmsh->mshcfg.dot11MeshForwarding) 2733 if (!ifmsh->mshcfg.dot11MeshForwarding)
2731 goto out; 2734 goto out;
2732 2735
2736 if (sdata->crypto_tx_tailroom_needed_cnt)
2737 tailroom = IEEE80211_ENCRYPT_TAILROOM;
2738
2733 fwd_skb = skb_copy_expand(skb, local->tx_headroom + 2739 fwd_skb = skb_copy_expand(skb, local->tx_headroom +
2734 sdata->encrypt_headroom, 0, GFP_ATOMIC); 2740 sdata->encrypt_headroom,
2741 tailroom, GFP_ATOMIC);
2735 if (!fwd_skb) 2742 if (!fwd_skb)
2736 goto out; 2743 goto out;
2737 2744