Fix following crash due to a leftover uninitialized mutex access
in mt76x02_set_rts_threshold routine.

[   55.655884] CPU: 0 PID: 412 Comm: iw Not tainted 4.19.0-rc7+ #2493
[   55.661739] Call Trace:
[   55.662523]  register_lock_class+0x528/0x530
[   55.663806]  __lock_acquire+0x89/0x15d0
[   55.664841]  lock_acquire+0x9f/0x140
[   55.665794]  ? mt76x02_set_rts_threshold+0x28/0x50
[   55.667056]  ? noop_count+0x10/0x10
[   55.667981]  ? mt76x02_set_rts_threshold+0x28/0x50
[   55.669251]  __mutex_lock+0x4a/0x4f0
[   55.670199]  ? mt76x02_set_rts_threshold+0x28/0x50
[   55.671454]  ? find_held_lock+0x2d/0x90
[   55.672450]  ? nl80211_pre_doit+0xf9/0x1a0
[   55.673467]  ? mt76x02_set_rts_threshold+0x28/0x50
[   55.674637]  mt76x02_set_rts_threshold+0x28/0x50
[   55.675773]  ieee80211_set_wiphy_params+0x16d/0x4e0
[   55.676910]  nl80211_set_wiphy+0x72b/0xbc0
[   55.677927]  genl_family_rcv_msg+0x192/0x3a0
[   55.678919]  genl_rcv_msg+0x42/0x89
[   55.679742]  ? genl_family_rcv_msg+0x3a0/0x3a0
[   55.680600]  netlink_rcv_skb+0x38/0x100
[   55.681313]  genl_rcv+0x1f/0x30
[   55.681899]  netlink_unicast+0x16b/0x210
[   55.682628]  netlink_sendmsg+0x1ed/0x390
[   55.683373]  sock_sendmsg+0x31/0x40
[   55.684020]  ___sys_sendmsg+0x23c/0x280
[   55.684736]  ? __handle_mm_fault+0xce8/0x1000
[   55.685445]  ? _raw_spin_unlock+0x1f/0x30
[   55.686059]  ? find_held_lock+0x2d/0x90
[   55.686648]  ? __do_page_fault+0x207/0x440
[   55.687274]  __sys_sendmsg+0x42/0x80
[   55.687825]  do_syscall_64+0x50/0x190
[   55.688410]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
[   55.689174] RIP: 0033:0x7fdeea227ba7
[   55.692157] RSP: 002b:00007ffec2395b58 EFLAGS: 00000246 ORIG_RAX: 
000000000000002e
[   55.693138] RAX: ffffffffffffffda RBX: 000000000066c350 RCX: 00007fdeea227ba7
[   55.694059] RDX: 0000000000000000 RSI: 00007ffec2395b90 RDI: 0000000000000003
[   55.694966] RBP: 0000000000671740 R08: 0000000000000002 R09: 0000000000000000
[   55.695773] R10: 0000000000000006 R11: 0000000000000246 R12: 0000000000671880
[   55.696572] R13: 00007ffec2395b90 R14: 00007ffec2395e60 R15: 0000000000671880

Fixes: 108a4861ef19 (" mt76: create new mt76x02-lib module for common
mt76x{0,2} code")

Reported-by: lorenzo.trisol...@fluidmesh.com
Reported-by: luca.bi...@fluidmesh.com
Signed-off-by: Lorenzo Bianconi <lorenzo.bianc...@redhat.com>
---
I will post a fix based on wireless-drivers repo
---
 drivers/net/wireless/mediatek/mt76/mt76x02.h      | 1 -
 drivers/net/wireless/mediatek/mt76/mt76x02_util.c | 4 ++--
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02.h 
b/drivers/net/wireless/mediatek/mt76/mt76x02.h
index 65daa3d3c289..1d8bb426e772 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02.h
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02.h
@@ -69,7 +69,6 @@ struct mt76x02_dev {
        struct mac_address macaddr_list[8];
 
        struct mutex phy_mutex;
-       struct mutex mutex;
 
        u8 txdone_seq;
        DECLARE_KFIFO_PTR(txstatus_fifo, struct mt76x02_tx_status);
diff --git a/drivers/net/wireless/mediatek/mt76/mt76x02_util.c 
b/drivers/net/wireless/mediatek/mt76/mt76x02_util.c
index 48f2f5382b57..bd0a879f7e7a 100644
--- a/drivers/net/wireless/mediatek/mt76/mt76x02_util.c
+++ b/drivers/net/wireless/mediatek/mt76/mt76x02_util.c
@@ -481,9 +481,9 @@ int mt76x02_set_rts_threshold(struct ieee80211_hw *hw, u32 
val)
        if (val != ~0 && val > 0xffff)
                return -EINVAL;
 
-       mutex_lock(&dev->mutex);
+       mutex_lock(&dev->mt76.mutex);
        mt76x02_mac_set_tx_protection(dev, val);
-       mutex_unlock(&dev->mutex);
+       mutex_unlock(&dev->mt76.mutex);
 
        return 0;
 }
-- 
2.19.1

Reply via email to