The statement where an array is being overrun is shown in the following
snippet: if (rate <= DESC_RATE11M) tx_power = pwr_idx_2g->cck_base[group];
else ====> tx_power = pwr_idx_2g->bw40_base[group]; The associated arrays
are defined in main.h as follows: struct rtw_2g_txpwr_idx { u8 cck_base[6];
u8 bw40_base[5]; struct rtw_2g_1s_pwr_idx_diff ht_1s_diff; struct
rtw_2g_ns_pwr_idx_diff ht_2s_diff; struct rtw_2g_ns_pwr_idx_diff
ht_3s_diff; struct rtw_2g_ns_pwr_idx_diff ht_4s_diff; }; The problem arises
because the value of group is 5 for channel 14. The trivial increase in the
dimension of bw40_base fails as this struct must match the layout of efuse.
The fix is to add the rate as an argument to rtw_get_channel_group() and
set the group for channel 14 to 4 if rate <= DESC_RATE11M. This patch fixes
commit fa6dfe6bff24 (“rtw88: resolve order of tx power setting routines”)
OS | Version | Architecture | Package | Version | Filename |
---|---|---|---|---|---|
ubuntu | 20.04 | noarch | linux | < any | UNKNOWN |
ubuntu | 20.04 | noarch | linux-aws | < any | UNKNOWN |
ubuntu | 18.04 | noarch | linux-aws-5.4 | < any | UNKNOWN |
ubuntu | 20.04 | noarch | linux-azure | < any | UNKNOWN |
ubuntu | 18.04 | noarch | linux-azure-5.4 | < any | UNKNOWN |
ubuntu | 20.04 | noarch | linux-bluefield | < any | UNKNOWN |
ubuntu | 20.04 | noarch | linux-gcp | < any | UNKNOWN |
ubuntu | 18.04 | noarch | linux-gcp-5.4 | < any | UNKNOWN |
ubuntu | 20.04 | noarch | linux-gkeop | < any | UNKNOWN |
ubuntu | 18.04 | noarch | linux-hwe-5.4 | < any | UNKNOWN |