Ad

CVE-2026-80914

NONE EPSS 0.22%
Обновлено 9 сентября 2026
Linux
Параметр Значение
Поставщик Linux
Публичный эксплойт Нет

В ядре Linux устранена следующая уязвимость: Bluetooth: ISO: исправлено использование сокета прослушивателя после освобождения в iso_conn_ready. iso_conn_ready() ищет сокет прослушивателя BIS с помощью iso_get_sock(), который принимает ссылку, а затем, не перепроверяя ее состояние, создает из него дочерний сокет: родитель = iso_get_sock(hdev, ...); если (!родитель) возврат; lock_sock (родитель); sk = iso_sock_alloc(sock_net(родительский), NULL, BTPROTO_ISO, ...); ... iso_chan_add (conn, sk, родительский); ... Release_sock (родительский); sock_put (родитель); Если сокет прослушивателя закрывается одновременно, между iso_get_sock() и lock_sock(), ссылка, взятая iso_get_sock(), может быть последней. первый: путь закрытия удаляет ссылку на список ссылок, и однажды iso_conn_ready() удаляет собственную ссылку в конце функции. сокет освобождается. Однако дочерний сокет уже связан с освобождается родительский элемент, а при более позднем отключении дочернего элемента выполняется iso_chan_del() -> bt_accept_unlink(), который разыменовывает висячий родительский указатель в освобожденную очередь принятия (использование после освобождения).

Тот самый висящий указатель также разыменовывается через родительский->***() в iso_chan_del(). Исправьте это так же, как был исправлен подключенный (не BIS) путь в фиксации. 0d255e63fcf3 («Bluetooth: ISO: правильно удерживайте sk в iso_conn_ready»): после блокировки сокета еще раз проверьте, что родительский элемент все еще является слушаю, живая розетка, иначе выручаю.

Показать оригинальное описание (EN)

In the Linux kernel, the following vulnerability has been resolved: Bluetooth: ISO: fix use-after-free of listener socket in iso_conn_ready iso_conn_ready() looks up the BIS listener socket with iso_get_sock(), which takes a reference, and then, without re-checking its state, creates a child socket from it: parent = iso_get_sock(hdev, ...); if (!parent) return; lock_sock(parent); sk = iso_sock_alloc(sock_net(parent), NULL, BTPROTO_ISO, ...); ... iso_chan_add(conn, sk, parent); ... release_sock(parent); sock_put(parent); If the listener socket is closed concurrently, between iso_get_sock() and lock_sock(), the reference taken by iso_get_sock() may be the last one: the close path drops the link-list reference, and once iso_conn_ready() drops its own reference at the end of the function the socket is freed. The child socket, however, is already linked to the freed parent, and a later disconnect of the child runs iso_chan_del() -> bt_accept_unlink(), which dereferences the dangling parent pointer into the freed accept queue (a use-after-free). The same dangling pointer is also dereferenced through parent->***() in iso_chan_del(). Fix it the same way the connected (non-BIS) path was fixed in commit 0d255e63fcf3 ("Bluetooth: ISO: hold sk properly in iso_conn_ready"): after taking the socket lock, re-check that the parent is still a listening, alive socket, and bail out otherwise.