linux-stable/net/wireless
Paul Zhang 2fcecea407 wifi: cfg80211: Fix bitrates overflow issue
[ Upstream commit 18429c51c7 ]

When invoking function cfg80211_calculate_bitrate_eht about
(320 MHz, EHT-MCS 13, EHT-NSS 2, EHT-GI 0), which means the
parameters as flags: 0x80, bw: 7, mcs: 13, eht_gi: 0, nss: 2,
this formula (result * rate->nss) will overflow and causes
the returned bitrate to be 3959 when it should be 57646.

Here is the explanation:
 u64 tmp;
 u32 result;
 …
 /* tmp = result = 4 * rates_996[0]
  *     = 4 * 480388888 = 0x72889c60
  */
 tmp = result;

 /* tmp = 0x72889c60 * 6144 = 0xabccea90000 */
 tmp *= SCALE;

 /* tmp = 0xabccea90000 / mcs_divisors[13]
  *     = 0xabccea90000 / 5120 = 0x8970bba6
  */
 do_div(tmp, mcs_divisors[rate->mcs]);

 /* result = 0x8970bba6 */
 result = tmp;

 /* normally (result * rate->nss) = 0x8970bba6 * 2 = 0x112e1774c,
  * but since result is u32, (result * rate->nss) = 0x12e1774c,
  * overflow happens and it loses the highest bit.
  * Then result =  0x12e1774c / 8 = 39595753,
  */
 result = (result * rate->nss) / 8;

Signed-off-by: Paul Zhang <quic_paulz@quicinc.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-12-02 17:42:59 +01:00
..
certs
.gitignore
Kconfig cfg80211: select CONFIG_CRC32 2021-01-05 15:50:36 -08:00
Makefile cfg80211: fix CONFIG_CFG80211_EXTRA_REGDB_KEYDIR typo 2022-03-01 14:10:14 +01:00
ap.c wifi: cfg80211: do some rework towards MLO link APIs 2022-06-20 12:54:58 +02:00
chan.c wifi: nl80211: relax wdev mutex check in wdev_chandef() 2022-07-01 11:42:58 +02:00
core.c wifi: cfg80211: clean up links appropriately 2022-07-15 11:43:18 +02:00
core.h wifi: cfg80211: clean up links appropriately 2022-07-15 11:43:18 +02:00
debugfs.c wifi: cfg80211: debugfs: fix return type in ht40allow_map_read() 2022-08-25 10:04:46 +02:00
debugfs.h
ethtool.c wifi: cfg80211: use strscpy to replace strlcpy 2022-07-15 11:43:12 +02:00
ibss.c wifi: cfg80211: do some rework towards MLO link APIs 2022-06-20 12:54:58 +02:00
lib80211.c lib80211: Remove unused macro DRV_NAME 2020-09-18 11:53:00 +02:00
lib80211_crypt_ccmp.c wifi: use struct_group to copy addresses 2022-09-03 16:40:06 +02:00
lib80211_crypt_tkip.c mm, treewide: rename kzfree() to kfree_sensitive() 2020-08-07 11:33:22 -07:00
lib80211_crypt_wep.c mm, treewide: rename kzfree() to kfree_sensitive() 2020-08-07 11:33:22 -07:00
mesh.c wifi: cfg80211: do some rework towards MLO link APIs 2022-06-20 12:54:58 +02:00
mlme.c wifi: cfg80211/nl80211: move rx management data into a struct 2022-07-22 14:28:26 +02:00
nl80211.c wifi: nl80211: add MLO link ID to the NL80211_CMD_FRAME TX API 2022-07-22 14:28:33 +02:00
nl80211.h wifi: cfg80211/nl80211: move rx management data into a struct 2022-07-22 14:28:26 +02:00
ocb.c wifi: cfg80211: do some rework towards MLO link APIs 2022-06-20 12:54:58 +02:00
of.c
pmsr.c cfg80211: pmsr: remove useless ifdef guards 2022-02-04 16:26:16 +01:00
radiotap.c mac80211: Use flex-array for radiotap header bitmap 2021-08-13 09:58:25 +02:00
rdev-ops.h wifi: cfg80211/mac80211: Support control port TX from specific link 2022-07-15 11:43:19 +02:00
reg.c wifi: cfg80211: fix memory leak in query_regdb_file() 2022-11-16 10:03:50 +01:00
reg.h cfg80211: avoid holding the RTNL when calling the driver 2021-01-26 11:55:50 +01:00
scan.c wifi: cfg80211: silence a sparse RCU warning 2022-11-16 10:03:50 +01:00
sme.c wifi: cfg80211: Fix validating BSS pointers in __cfg80211_connect_result 2022-08-08 11:09:52 +03:00
sysfs.c cfg80211: shut down interfaces on failed resume 2021-06-09 16:09:20 +02:00
sysfs.h
trace.c
trace.h wifi: cfg80211/nl80211: move rx management data into a struct 2022-07-22 14:28:26 +02:00
util.c wifi: cfg80211: Fix bitrates overflow issue 2022-12-02 17:42:59 +01:00
wext-compat.c wifi: cfg80211: do some rework towards MLO link APIs 2022-06-20 12:54:58 +02:00
wext-compat.h
wext-core.c wifi: wext: use flex array destination for memcpy() 2022-11-26 09:27:55 +01:00
wext-priv.c
wext-proc.c
wext-sme.c wifi: cfg80211: do some rework towards MLO link APIs 2022-06-20 12:54:58 +02:00
wext-spy.c wireless: wext-spy: Fix out-of-bounds warning 2021-06-23 10:57:17 +02:00