Explorar o código

Bluetooth: Fix possible use after free in delete path

We need to use the _sync() version for cancelling the info and security
timer in the L2CAP connection delete path. Otherwise the delayed work
handler might run after the connection object is freed.

Signed-off-by: Ulisses Furquim <ulisses@profusion.mobi>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Ulisses Furquim %!s(int64=13) %!d(string=hai) anos
pai
achega
127074bfa3
Modificáronse 1 ficheiros con 2 adicións e 2 borrados
  1. 2 2
      net/bluetooth/l2cap_core.c

+ 2 - 2
net/bluetooth/l2cap_core.c

@@ -1016,10 +1016,10 @@ static void l2cap_conn_del(struct hci_conn *hcon, int err)
 	hci_chan_del(conn->hchan);
 	hci_chan_del(conn->hchan);
 
 
 	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
 	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
-		__cancel_delayed_work(&conn->info_timer);
+		cancel_delayed_work_sync(&conn->info_timer);
 
 
 	if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags)) {
 	if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags)) {
-		__cancel_delayed_work(&conn->security_timer);
+		cancel_delayed_work_sync(&conn->security_timer);
 		smp_chan_destroy(conn);
 		smp_chan_destroy(conn);
 	}
 	}