| From: Felix Fietkau <nbd@nbd.name> |
| Date: Sun, 26 Feb 2023 20:30:20 +0100 |
| Subject: [PATCH] wifi: mac80211: fix mesh path discovery based on unicast |
| packets |
| |
| If a packet has reached its intended destination, it was bumped to the code |
| that accepts it, without first checking if a mesh_path needs to be created |
| based on the discovered source. |
| Fix this by moving the destination address check further down |
| |
| Fixes: 986e43b19ae9 ("wifi: mac80211: fix receiving A-MSDU frames on mesh interfaces") |
| Signed-off-by: Felix Fietkau <nbd@nbd.name> |
| --- |
| |
| --- a/net/mac80211/rx.c |
| +++ b/net/mac80211/rx.c |
| @@ -2824,17 +2824,6 @@ ieee80211_rx_mesh_data(struct ieee80211_ |
| mesh_rmc_check(sdata, eth->h_source, mesh_hdr)) |
| return RX_DROP_MONITOR; |
| |
| - /* Frame has reached destination. Don't forward */ |
| - if (ether_addr_equal(sdata->vif.addr, eth->h_dest)) |
| - goto rx_accept; |
| - |
| - if (!ifmsh->mshcfg.dot11MeshForwarding) { |
| - if (is_multicast_ether_addr(eth->h_dest)) |
| - goto rx_accept; |
| - |
| - return RX_DROP_MONITOR; |
| - } |
| - |
| /* forward packet */ |
| if (sdata->crypto_tx_tailroom_needed_cnt) |
| tailroom = IEEE80211_ENCRYPT_TAILROOM; |
| @@ -2881,6 +2870,17 @@ ieee80211_rx_mesh_data(struct ieee80211_ |
| rcu_read_unlock(); |
| } |
| |
| + /* Frame has reached destination. Don't forward */ |
| + if (ether_addr_equal(sdata->vif.addr, eth->h_dest)) |
| + goto rx_accept; |
| + |
| + if (!ifmsh->mshcfg.dot11MeshForwarding) { |
| + if (is_multicast_ether_addr(eth->h_dest)) |
| + goto rx_accept; |
| + |
| + return RX_DROP_MONITOR; |
| + } |
| + |
| skb_set_queue_mapping(skb, ieee802_1d_to_ac[skb->priority]); |
| |
| if (!multicast && |