| From 311137ee183df8e0b3861d27b4ed241a3d061f99 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 25 Feb 2021 18:32:41 +0000 |
| Subject: mt7601u: fix always true expression |
| |
| From: Colin Ian King <colin.king@canonical.com> |
| |
| [ Upstream commit 87fce88658ba047ae62e83497d3f3c5dc22fa6f9 ] |
| |
| Currently the expression ~nic_conf1 is always true because nic_conf1 |
| is a u16 and according to 6.5.3.3 of the C standard the ~ operator |
| promotes the u16 to an integer before flipping all the bits. Thus |
| the top 16 bits of the integer result are all set so the expression |
| is always true. If the intention was to flip all the bits of nic_conf1 |
| then casting the integer result back to a u16 is a suitabel fix. |
| |
| Interestingly static analyzers seem to thing a bitwise ! should be |
| used instead of ~ for this scenario, so I think the original intent |
| of the expression may need some extra consideration. |
| |
| Addresses-Coverity: ("Logical vs. bitwise operator") |
| Fixes: c869f77d6abb ("add mt7601u driver") |
| Signed-off-by: Colin Ian King <colin.king@canonical.com> |
| Acked-by: Jakub Kicinski <kubakici@wp.pl> |
| Signed-off-by: Kalle Valo <kvalo@codeaurora.org> |
| Link: https://lore.kernel.org/r/20210225183241.1002129-1-colin.king@canonical.com |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/wireless/mediatek/mt7601u/eeprom.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/drivers/net/wireless/mediatek/mt7601u/eeprom.c b/drivers/net/wireless/mediatek/mt7601u/eeprom.c |
| index da6faea092d6..80d0f64205f8 100644 |
| --- a/drivers/net/wireless/mediatek/mt7601u/eeprom.c |
| +++ b/drivers/net/wireless/mediatek/mt7601u/eeprom.c |
| @@ -106,7 +106,7 @@ mt7601u_has_tssi(struct mt7601u_dev *dev, u8 *eeprom) |
| { |
| u16 nic_conf1 = get_unaligned_le16(eeprom + MT_EE_NIC_CONF_1); |
| |
| - return ~nic_conf1 && (nic_conf1 & MT_EE_NIC_CONF_1_TX_ALC_EN); |
| + return (u16)~nic_conf1 && (nic_conf1 & MT_EE_NIC_CONF_1_TX_ALC_EN); |
| } |
| |
| static void |
| -- |
| 2.30.2 |
| |