On Fri, Mar 06, 2020 at 10:47:44AM +0100, Stefan Sperling wrote:
> 802.11 frame sequence numbers are in the range 0x0 - 0xfff.
> 
> Don't let internal representations of sequence numbers grow beyond 0xfff.
> 
> ok?
> 
> diff 582540bcd55abf4efa3abe8c23ebc7f3c247245d 
> ba499e0f519999b139f9ad6d4b4ea18cbf56bd93
> blob - 808b6e1f46b777ea408561c0fbf511e79d477c54
> blob + 6c8057426973640ab03af4ec061adfa1d3c695bf
> --- sys/net80211/ieee80211_output.c
> +++ sys/net80211/ieee80211_output.c
> @@ -190,7 +190,7 @@ ieee80211_mgmt_output(struct ifnet *ifp, struct ieee80
>       *(u_int16_t *)&wh->i_dur[0] = 0;
>       *(u_int16_t *)&wh->i_seq[0] =
>           htole16(ni->ni_txseq << IEEE80211_SEQ_SEQ_SHIFT);
> -     ni->ni_txseq++;
> +     ni->ni_txseq = (ni->ni_txseq + 1) & 0xfff;
>       IEEE80211_ADDR_COPY(wh->i_addr1, ni->ni_macaddr);
>       IEEE80211_ADDR_COPY(wh->i_addr2, ic->ic_myaddr);
>       IEEE80211_ADDR_COPY(wh->i_addr3, ni->ni_bssid);
> @@ -623,11 +623,11 @@ ieee80211_encap(struct ifnet *ifp, struct mbuf *m, str
>               *(u_int16_t *)qwh->i_qos = htole16(qos);
>               *(u_int16_t *)qwh->i_seq =
>                   htole16(ni->ni_qos_txseqs[tid] << IEEE80211_SEQ_SEQ_SHIFT);
> -             ni->ni_qos_txseqs[tid]++;
> +             ni->ni_qos_txseqs[tid] = (ni->ni_qos_txseqs[tid] + 1) & 0xfff;
>       } else {
>               *(u_int16_t *)&wh->i_seq[0] =
>                   htole16(ni->ni_txseq << IEEE80211_SEQ_SEQ_SHIFT);
> -             ni->ni_txseq++;
> +             ni->ni_txseq = (ni->ni_txseq + 1) & 0xfff;
>       }
>       switch (ic->ic_opmode) {
>       case IEEE80211_M_STA:
> 

Makes sense. ok tobhe@

Reply via email to