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 Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
		| @@ -0,0 +1,52 @@ | ||||
| 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 && | ||||
		Reference in New Issue
	
	Block a user
	 Felix Fietkau
					Felix Fietkau