CVE-2026-98580 in Linuxinfo

Zusammenfassung

von VulDB • 19.10.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

nfc: llcp: Behebung einer Race Condition im Lebenszyklus der accept_queue (Annahmeschlange)

In nfc_llcp_socket_release() werden Sockets und die Annahmeschlangen des Listeners unter dem lokalen rwlock für Sockets sowie bh_lock_sock() durchlaufen. Allerdings synchronisiert bh_lock_sock() nicht gegen den lock_sock() im Prozesskontext, der von nfc_llcp_accept_dequeue() während accept() gehalten wird. Da socket_release() sock_owned_by_user() nicht überprüft, können beide Pfade gleichzeitig denselben Kind-Socket entkoppeln und freigeben, was zu einem Use-After-Free oder einer Dereferenzierung eines NULL-Zeigers auf child->parent in nfc_llcp_accept_unlink() führt.

Behebung dieser Synchronisations-Race Condition durch Verwendung von lock_sock() im Prozesskontext anstelle von bh_lock_sock() in nfc_llcp_socket_release():

1. Entfernen Sie Sockets aus der lokalen Socket-Liste unter dem Schreib-Sperre (write lock) mittels nfc_llcp_sock_list_pop(), sodass lock_sock() erworben werden kann, ohne das rwlock zu halten.

2. Da lock_sock() schlafen kann, wird die endgültige Freigabe der nfc_llcp_local-Struktur in eine Workqueue (release_work) verschoben. Dies vermeidet einen „Sleeping-in-Atomic“-Fehler beim Abwurf des letzten lokalen Referenzzählers aus dem Softirq-Kontext. Zusätzlich wird während der gesamten Lebensdauer von der Registrierung bis zur endgültigen Zerstörung ein einzelnes Geräteverweisobjekt (device reference) auf local gehalten.

3. Verwenden Sie in nfc_llcp_local_get() kref_get_unless_zero(), um das Wiederbeleben eines lokalen Objekts zu verhindern, dessen Abbau bereits geplant wurde.

4. Überprüfen Sie in llcp_sock_accept(), ob der Socket-Status des Listeners nach dem Aufwachen aus schedule_timeout() immer noch LLCP_LISTEN ist, um Hänger (Hangs) bei gleichzeitiger Schließung des Listers zu vermeiden.

5. Entkoppeln Sie beim Lösen nicht akzeptierter Kind-Sockets während der Listener-Freigabe diese von local->sockets, rufen Sie sock_orphan() auf und reduzieren Sie deren ursprüngliche sk_alloc-Erstellungsreferenz durch sock_put().

6. Machen Sie nfc_llcp_accept_unlink() idempotent, indem Sie den Zugriff auf das übergeordnete Element (parent) mit einer NULL-Prüfung absichern.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Zuständig

Linux

Reservieren

25.09.2026

Veröffentlichung

18.10.2026

Moderieren

akzeptiert

Eintrag

VDB-422087

EPSS

0.00000

KEV

nein

Aktivitäten

very low

Quellen

Might our Artificial Intelligence support you?

Check our Alexa App!