On Sat, Jun 25, 2022 at 10:07:21PM +0200, Stefan Sperling wrote:
> There is an off-by-one in bwfm_update_node(). This function reads
> the tx_rate field from station information returned by firmware.
> 
> According to a comment in the Linux driver, this field is valid
> for sta_info command versions >= 3.
> 
> linux/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h
> struct brcmf_sta_info_le {
>       __le16 ver;             /* version of this struct */
> [...]
>       /* Fields valid for ver >= 3 */
> [...]
>       __le32 tx_rate; /* Rate of last successful tx frame */
> 
> However, our driver only reads Tx rate info if the version is >= 4.
> 
> On the rpi2 usb wifi adapter (WLU6331) this breaks media mode display.
> Firmware on this device uses command version 3, and the media mode
> displayed is always "DS1 11g". Diff below fixes this. ifconfig will
> now display 11n mode while associated to an 11n AP.
> 
> ok?

sta.rssi is later used which is 'Fields valid for ver >= 4'
but it seems with the earlier zeroing the use here should be fine?

ok jsg@

> 
> diff /usr/src
> commit - 9badb9ad8932c12f4ece484255eb2703a2518c17
> path + /usr/src
> blob - 0c9c948115a0c115a43bd365ad4e389ba694c4a8
> file + sys/dev/ic/bwfm.c
> --- sys/dev/ic/bwfm.c
> +++ sys/dev/ic/bwfm.c
> @@ -703,7 +703,7 @@ bwfm_update_node(void *arg, struct ieee80211_node *ni)
>       if (!IEEE80211_ADDR_EQ(ni->ni_macaddr, sta.ea))
>               return;
>  
> -     if (le16toh(sta.ver) < 4)
> +     if (le16toh(sta.ver) < 3)
>               return;
>  
>       flags = le32toh(sta.flags);
> 
> 

Reply via email to