]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ath9k_htc: memory corruption calling set_bit()
authorDan Carpenter <dan.carpenter@oracle.com>
Thu, 14 May 2015 08:34:48 +0000 (11:34 +0300)
committerLuis Henriques <luis.henriques@canonical.com>
Wed, 15 Jul 2015 09:01:20 +0000 (10:01 +0100)
commit 191f1aeeb93bb58e56f4d1868294ae22f3f67d4e upstream.

In d8a2c51cdcae ('ath9k_htc: Use atomic operations for op_flags') we
changed things like this:

- if (priv->op_flags & OP_TSF_RESET) {
+ if (test_bit(OP_TSF_RESET, &priv->op_flags)) {

The problem is that test_bit() takes a bit number and not a mask.  It
means that when we do:

set_bit(OP_TSF_RESET, &priv->op_flags);

Then it sets the (1 << 6) bit instead of the 6 bit so we are setting a
bit which is past the end of the unsigned long.

Fixes: d8a2c51cdcae ('ath9k_htc: Use atomic operations for op_flags')
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
drivers/net/wireless/ath/ath9k/htc.h

index 09a5d72f3ff5b4e9cf27b6c0305193e738c1aba5..792fa3c891f21e05c105bf71a0887112be458be5 100644 (file)
@@ -437,9 +437,9 @@ static inline void ath9k_htc_stop_btcoex(struct ath9k_htc_priv *priv)
 }
 #endif /* CONFIG_ATH9K_BTCOEX_SUPPORT */
 
-#define OP_BT_PRIORITY_DETECTED    BIT(3)
-#define OP_BT_SCAN                 BIT(4)
-#define OP_TSF_RESET               BIT(6)
+#define OP_BT_PRIORITY_DETECTED    3
+#define OP_BT_SCAN                 4
+#define OP_TSF_RESET               6
 
 struct ath9k_htc_priv {
        struct device *dev;