CVE-2026-31667 in Linuxinfo

Zusammenfassung

von VulDB • 29.05.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

Input: uinput – Behebung einer zyklischen Lock-Abhängigkeit mit ff-core

Eine Warnung wegen einer zyklischen Lock-Abhängigkeit (lockdep) kann reproduzierbar ausgelöst werden, wenn ein Force-Feedback-Gamepad mit uinput verwendet wird (z. B. beim Spielen von ELDEN RING unter Wine mit einem Flydigi Vader 5-Controller):

ff->mutex -> udev->mutex -> input_mutex -> dev->mutex -> ff->mutex

Der Zyklus wird durch vier Pfade zur Lock-Akquise verursacht:

1. ff-Upload: input_ff_upload() hält ff->mutex und ruft uinput_dev_upload_effect() -> uinput_request_submit() -> uinput_request_send() auf, wodurch udev->mutex erworben wird.

2. Geräteerstellung: uinput_ioctl_handler() hält udev->mutex und ruft uinput_create_device() -> input_register_device() auf, wodurch input_mutex erworben wird.

3. Geräte-Registrierung: input_register_device() hält input_mutex und ruft kbd_connect() -> input_register_handle() auf, wodurch dev->mutex erworben wird.

4. evdev-Freigabe: evdev_release() ruft input_flush_device() unter dev->mutex auf, welches input_ff_flush() aufruft und dabei ff->mutex erwirbt.

Behoben wird dies durch Einführung eines neuen state_lock-Spinlocks zum Schutz des Zugriffs auf udev->state und udev->dev in uinput_request_send() anstelle des Erwerbs von udev->mutex. Die Funktion muss lediglich atomar den Gerätezustand prüfen und ein Eingabeereignis über uinput_dev_event() in den Ringpuffer einreihen – beide Vorgänge sind unter einem Spinlock sicher (ktime_get_ts64() und wake_up_interruptible() blockieren nicht). Dies bricht die Abhängigkeit ff->mutex -> udev->mutex auf, da ein Spinlock ein Blatt in der Lock-Reihenfolge ist und keine Zyklen mit Mutexes bilden kann.

Um sicherzustellen, dass Zustandsübergänge für uinput_request_send() sichtbar bleiben, werden Schreibzugriffe auf udev->state in uinput_create_device() und uinput_destroy_device() mit demselben state_lock-Spinlock geschützt.

Zusätzlich wird init_completion(&request->done) von uinput_request_send() nach uinput_request_submit() vor uinput_request_reserve_slot() verschoben. Sobald der Slot zugewiesen wurde, kann uinput_flush_requests() jederzeit aus dem Destroy-Pfad heraus complete() darauf aufrufen; daher muss die Completion initialisiert sein, bevor die Anfrage sichtbar wird.

Lock-Reihenfolge nach der Korrektur:

ff->mutex -> state_lock (Spinlock, Blatt) udev->mutex -> state_lock (Spinlock, Blatt) udev->mutex -> input_mutex -> dev->mutex -> ff->mutex (keine Rückwärtskante)

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Zuständig

Linux

Reservieren

09.03.2026

Veröffentlichung

24.04.2026

Moderieren

akzeptiert

Eintrag

VDB-359464

CPE

bereit

EPSS

0.00013

KEV

nein

Aktivitäten

very low

Quellen

Interested in the pricing of exploits?

See the underground prices here!