В ядре Linux устранена следующая уязвимость:
Bluetooth: ISO: избегать разыменования NULL для conn в iso_conn_big_sync()
iso_conn_big_sync() снимает блокировку сокета для вызова hci_get_route() и
затем повторно получает его, но после этого разыменовывает iso_pi(sk)->conn->hcon
без повторной проверки того, что conn все еще действителен. Пока замок опущен, соединение может оторваться под
та же блокировка сокета: iso_disconn_cfm() -> iso_conn_del() -> iso_chan_del()
устанавливает iso_pi(sk)->conn в NULL (и путь удаления широковещательной рассылки также может
очистить conn->hcon самостоятельно). Когда iso_conn_big_sync() повторно получает
lock и читает conn->hcon, conn может быть NULL, вызывая NULL-указатель
разыменование (hcon — первый член структуры iso_conn).
Этот путь достигается из iso_sock_recvmsg() для трансляции PA-sync.
сокет приемника (BT_SK_DEFER_SETUP | BT_SK_PA_SYNC), поэтому отброшенная блокировка
окно может участвовать в гонке с разрывом соединения, вызванным событиями контроллера. Повторно проверьте iso_pi(sk)->conn и его hcon после повторного получения сокета.
заблокируйте и выйдите из системы, если соединение пропало, как это уже сделано в
родной брат iso_sock_rebind_bc().
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: Bluetooth: ISO: avoid NULL deref of conn in iso_conn_big_sync() iso_conn_big_sync() drops the socket lock to call hci_get_route() and then re-acquires it, but dereferences iso_pi(sk)->conn->hcon afterwards without re-checking that conn is still valid. While the lock is dropped, the connection can be torn down under the same socket lock: iso_disconn_cfm() -> iso_conn_del() -> iso_chan_del() sets iso_pi(sk)->conn to NULL (and the broadcast teardown path can also clear conn->hcon on its own). When iso_conn_big_sync() re-acquires the lock and reads conn->hcon, conn may be NULL, causing a NULL pointer dereference (hcon is the first member of struct iso_conn). This path is reached from iso_sock_recvmsg() for a PA-sync broadcast sink socket (BT_SK_DEFER_SETUP | BT_SK_PA_SYNC), so the dropped-lock window can race with connection teardown driven by controller events. Re-validate iso_pi(sk)->conn and its hcon after re-acquiring the socket lock and bail out if the connection went away, as already done in the sibling iso_sock_rebind_bc().