Hi all, On Fri, 31 Mar 2023 10:49:59 +1100 Stephen Rothwell wrote: > > Today's linux-next merge of the wireless-next tree got a conflict in: > > net/mac80211/rx.c > > between commit: > > a16fc38315f2 ("wifi: mac80211: fix potential null pointer dereference") > > from the wireless tree and commit: > > fe4a6d2db3ba ("wifi: mac80211: implement support for yet another mesh A-MSDU format") > > from the wireless-next tree. > > I fixed it up (see below) and can carry the fix as necessary. This > is now fixed as far as linux-next is concerned, but any non trivial > conflicts should be mentioned to your upstream maintainer when your tree > is submitted for merging. You may also want to consider cooperating > with the maintainer of the conflicting tree to minimise any particularly > complex conflicts. > > -- > Cheers, > Stephen Rothwell > > diff --cc net/mac80211/rx.c > index 3e2176a730e6,1c957194554b..000000000000 > --- a/net/mac80211/rx.c > +++ b/net/mac80211/rx.c > @@@ -2776,27 -2862,12 +2843,31 @@@ 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 (!--mesh_hdr->ttl) { > + if (multicast) > + goto rx_accept; > + > + IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_ttl); > + return RX_DROP_MONITOR; > + } > + > + 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 && > + ieee80211_rx_mesh_fast_forward(sdata, skb, mesh_hdrlen)) > + return RX_QUEUED; > + > ieee80211_fill_mesh_addresses(&hdr, &hdr.frame_control, > eth->h_dest, eth->h_source); > hdrlen = ieee80211_hdrlen(hdr.frame_control); > @@@ -2914,14 -2982,24 +2985,24 @@@ __ieee80211_rx_h_amsdu(struct ieee80211 > data_offset, true)) > return RX_DROP_UNUSABLE; > > - if (rx->sta && rx->sta->amsdu_mesh_control < 0) { > + if (rx->sta->amsdu_mesh_control < 0) { > - bool valid_std = ieee80211_is_valid_amsdu(skb, true); > - bool valid_nonstd = ieee80211_is_valid_amsdu(skb, false); > + s8 valid = -1; > + int i; > + > + for (i = 0; i <= 2; i++) { > + if (!ieee80211_is_valid_amsdu(skb, i)) > + continue; > + > + if (valid >= 0) { > + /* ambiguous */ > + valid = -1; > + break; > + } > > - if (valid_std && !valid_nonstd) > - rx->sta->amsdu_mesh_control = 1; > - else if (valid_nonstd && !valid_std) > - rx->sta->amsdu_mesh_control = 0; > + valid = i; > + } > + > + rx->sta->amsdu_mesh_control = valid; > } > > ieee80211_amsdu_to_8023s(skb, &frame_list, dev->dev_addr, This is now a conflict between the net-next and net trees. -- Cheers, Stephen Rothwell