mirror of
https://github.com/torvalds/linux.git
synced 2026-09-14 16:10:02 +02:00
hci_conn::iso_data is accessed and modified without lock or RCU.
This leads to a race
[Task hdev->workqueue] [Task 2]
iso_recv iso_conn_put(conn)
conn = LOAD hcon->iso_data iso_conn_free(conn)
iso_conn_hold_unless_zero(conn) hcon->iso_data = NULL
kfree(conn)
kref_get_unless_zero(&conn->ref) /* UAF */
and also to races in iso_conn_add() vs. iso_conn_free().
Fix by adding spinlock hci_conn::proto_lock and using it to guard
hci_conn::iso_data.
Fixes:
|
||
|---|---|---|
| .. | ||
| bluetooth.h | ||
| coredump.h | ||
| hci_core.h | ||
| hci_drv.h | ||
| hci_mon.h | ||
| hci_sock.h | ||
| hci_sync.h | ||
| hci.h | ||
| iso.h | ||
| l2cap.h | ||
| mgmt.h | ||
| rfcomm.h | ||
| sco.h | ||