Skip to content

Commit 15f32ca

Browse files
pvVudentz
authored andcommitted
Bluetooth: 6lowpan: add missing l2cap_chan_lock()
l2cap_chan_close() needs to be called in l2cap_chan_lock(), otherwise l2cap_le_sig_cmd() etc. may run concurrently. Add missing locks around l2cap_chan_close(). Fixes: 6b8d4a6 ("Bluetooth: 6LoWPAN: Use connected oriented channel instead of fixed one") Signed-off-by: Pauli Virtanen <pav@iki.fi> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
1 parent 98454bc commit 15f32ca

1 file changed

Lines changed: 8 additions & 0 deletions

File tree

net/bluetooth/6lowpan.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -927,7 +927,9 @@ static int bt_6lowpan_disconnect(struct l2cap_conn *conn, u8 dst_type)
927927

928928
BT_DBG("peer %p chan %p", peer, peer->chan);
929929

930+
l2cap_chan_lock(peer->chan);
930931
l2cap_chan_close(peer->chan, ENOENT);
932+
l2cap_chan_unlock(peer->chan);
931933

932934
return 0;
933935
}
@@ -1089,7 +1091,9 @@ static void do_enable_set(struct work_struct *work)
10891091

10901092
mutex_lock(&set_lock);
10911093
if (listen_chan) {
1094+
l2cap_chan_lock(listen_chan);
10921095
l2cap_chan_close(listen_chan, 0);
1096+
l2cap_chan_unlock(listen_chan);
10931097
l2cap_chan_put(listen_chan);
10941098
}
10951099

@@ -1148,7 +1152,9 @@ static ssize_t lowpan_control_write(struct file *fp,
11481152

11491153
mutex_lock(&set_lock);
11501154
if (listen_chan) {
1155+
l2cap_chan_lock(listen_chan);
11511156
l2cap_chan_close(listen_chan, 0);
1157+
l2cap_chan_unlock(listen_chan);
11521158
l2cap_chan_put(listen_chan);
11531159
listen_chan = NULL;
11541160
}
@@ -1310,7 +1316,9 @@ static void __exit bt_6lowpan_exit(void)
13101316
debugfs_remove(lowpan_control_debugfs);
13111317

13121318
if (listen_chan) {
1319+
l2cap_chan_lock(listen_chan);
13131320
l2cap_chan_close(listen_chan, 0);
1321+
l2cap_chan_unlock(listen_chan);
13141322
l2cap_chan_put(listen_chan);
13151323
}
13161324

0 commit comments

Comments
 (0)