Takashi Iwai 6ace07
From 1944015fe9c1d9fa5e9eb7ffbbb5ef8954d6753b Mon Sep 17 00:00:00 2001
Takashi Iwai 6ace07
From: Johannes Berg <johannes.berg@intel.com>
Takashi Iwai 6ace07
Date: Fri, 12 Feb 2021 11:22:14 +0100
Takashi Iwai 6ace07
Subject: [PATCH] mac80211: fix rate mask reset
Takashi Iwai 6ace07
Git-commit: 1944015fe9c1d9fa5e9eb7ffbbb5ef8954d6753b
Takashi Iwai 6ace07
Patch-mainline: v5.12-rc5
Takashi Iwai 6ace07
References: git-fixes
Takashi Iwai 6ace07
Takashi Iwai 6ace07
Coverity reported the strange "if (~...)" condition that's
Takashi Iwai 6ace07
always true. It suggested that ! was intended instead of ~,
Takashi Iwai 6ace07
but upon further analysis I'm convinced that what really was
Takashi Iwai 6ace07
intended was a comparison to 0xff/0xffff (in HT/VHT cases
Takashi Iwai 6ace07
respectively), since this indicates that all of the rates
Takashi Iwai 6ace07
are enabled.
Takashi Iwai 6ace07
Takashi Iwai 6ace07
Change the comparison accordingly.
Takashi Iwai 6ace07
Takashi Iwai 6ace07
I'm guessing this never really mattered because a reset to
Takashi Iwai 6ace07
not having a rate mask is basically equivalent to having a
Takashi Iwai 6ace07
mask that enables all rates.
Takashi Iwai 6ace07
Takashi Iwai 6ace07
Reported-by: Colin Ian King <colin.king@canonical.com>
Takashi Iwai 6ace07
Fixes: 2ffbe6d33366 ("mac80211: fix and optimize MCS mask handling")
Takashi Iwai 6ace07
Fixes: b119ad6e726c ("mac80211: add rate mask logic for vht rates")
Takashi Iwai 6ace07
Reviewed-by: Colin Ian King <colin.king@canonical.com>
Takashi Iwai 6ace07
Link: https://lore.kernel.org/r/20210212112213.36b38078f569.I8546a20c80bc1669058eb453e213630b846e107b@changeid
Takashi Iwai 6ace07
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Takashi Iwai 6ace07
Acked-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai 6ace07
Takashi Iwai 6ace07
---
Takashi Iwai 6ace07
 net/mac80211/cfg.c | 4 ++--
Takashi Iwai 6ace07
 1 file changed, 2 insertions(+), 2 deletions(-)
Takashi Iwai 6ace07
Takashi Iwai 6ace07
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
Takashi Iwai 6ace07
index c4c70e30ad7f..68a0de02b561 100644
Takashi Iwai 6ace07
--- a/net/mac80211/cfg.c
Takashi Iwai 6ace07
+++ b/net/mac80211/cfg.c
Takashi Iwai 6ace07
@@ -2950,14 +2950,14 @@ static int ieee80211_set_bitrate_mask(struct wiphy *wiphy,
Takashi Iwai 6ace07
 			continue;
Takashi Iwai 6ace07
 
Takashi Iwai 6ace07
 		for (j = 0; j < IEEE80211_HT_MCS_MASK_LEN; j++) {
Takashi Iwai 6ace07
-			if (~sdata->rc_rateidx_mcs_mask[i][j]) {
Takashi Iwai 6ace07
+			if (sdata->rc_rateidx_mcs_mask[i][j] != 0xff) {
Takashi Iwai 6ace07
 				sdata->rc_has_mcs_mask[i] = true;
Takashi Iwai 6ace07
 				break;
Takashi Iwai 6ace07
 			}
Takashi Iwai 6ace07
 		}
Takashi Iwai 6ace07
 
Takashi Iwai 6ace07
 		for (j = 0; j < NL80211_VHT_NSS_MAX; j++) {
Takashi Iwai 6ace07
-			if (~sdata->rc_rateidx_vht_mcs_mask[i][j]) {
Takashi Iwai 6ace07
+			if (sdata->rc_rateidx_vht_mcs_mask[i][j] != 0xffff) {
Takashi Iwai 6ace07
 				sdata->rc_has_vht_mcs_mask[i] = true;
Takashi Iwai 6ace07
 				break;
Takashi Iwai 6ace07
 			}
Takashi Iwai 6ace07
-- 
Takashi Iwai 6ace07
2.26.2
Takashi Iwai 6ace07