CVE-2026-93164 in Linuxinfo

Zusammenfassung

von VulDB • 18.09.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

uprobes/x86: Optimierte uprobes von nop5 auf nop10 umstellen

Andrii meldete ein Problem mit optimierten uprobes [1], das den Redzone-Bereich durch eine call-Anweisung korrumpieren kann, die die Rücksprungadresse im Stack speichert, während Benutzercode temporäre Daten ohne Anpassung des rsp-Registers halten könnte.

Dies wird behoben, indem die optimierten uprobes auf einer 10-Byte-nop-Anweisung platziert werden, sodass wir eine weitere Anweisung unterbringen können, um den Redzone-Bereich zu verlassen, bevor der call ausgeführt wird, wie zum Beispiel:

lea -0x80(%rsp), %rsp call tramp

Beachten Sie, dass die lea-Anweisung verwendet wird, um das rsp-Register anzupassen, ohne die Flags zu ändern.

Wir verwenden nop10 und die folgende Transformation der optimierten Anweisungen nach oben und zurück, wie von Peterz [2] vorgeschlagen.

Optimierungspfad (int3_update_optimize):

1) Anfangszustand nach Installation des uprobe durch set_swbp(): cc 2e 0f 1f 84 00 00 00 00 00

Ab Offset 0 handelt es sich um INT3, gefolgt vom Rest der ursprünglichen 10-Byte-NOP.

Nach einer vorherigen Nichtoptimierung können die Bytes 5..9 noch die alte call-Anweisung enthalten, die für Threads, die bereits dort sind, gültig bleibt.

2) Umschreiben des LEA-Rests und der call-Verschiebung: cc [8d 64 24 80 e8 d0 d1 d2 d3]

Ab Offset 0 wird hier auf den uprobe-INT3 getrappt. Die Bytes 1..9 sind keine ausführbaren Einstiegspunkte, während Byte 0 getrappt ist.

3) Veröffentlichen des ersten LEA-Bytes: [48] 8d 64 24 80 e8 d0 d1 d2 d3

Ab Offset 0 handelt es sich um: lea -0x80(%rsp), %rsp call <uprobe-trampoline>

Nicht-Optimierungspfad (int3_update_unoptimize):

1) Anfangszustand im optimierten Modus: 48 8d 64 24 80 e8 d0 d1 d2 d3 Entspricht Punkt 3) oben.

2) Neue Einstiegspunkte trappen, bevor die NOP-Bytes wiederhergestellt werden: [cc] 8d 64 24 80 e8 d0 d1 d2 d3

Ab Offset 0 wird hier getrappt. Ein Thread, der den LEA bereits ausgeführt hat, kann weiterhin die intakte CALL an Offset 5 erreichen.

3) Wiederherstellen der Bytes 1..4 des ursprünglichen NOP unter Beibehaltung von Byte 0 als getrappt und Byte 5 als CALL. cc [2e 0f 1f 84] e8 d0 d1 d2 d3

Ab Offset 0 wird hier weiterhin getrappt. Offset 5 ist für jeden Thread, der den ersten LEA-Byte bereits passiert hat, immer noch die CALL.

4) Veröffentlichen des ersten Bytes des ursprünglichen NOP: [66] 2e 0f 1f 84 e8 d0 d1 d2 d3

Ab Offset 0 handelt es sich um den wiederhergestellten 10-Byte-NOP; der CALL-Opcodes und die Verschiebung sind nun nur noch NOP-Operanden. Offset 5 decodiert weiterhin als CALL für einen Thread, der bereits dort war.

Es gibt nur ein einziges Ziel uprobe-trampoline für die gegebene nop10-Instruktionsadresse, daher wird die CALL-Anweisung über Nichtoptimierungs/Optimierungs-Zyklen hinweg nicht geändert. Daher ist jede Aufgabe, die bei der CALL-Anweisung präemptiert (unterbrochen) wird, garantiert, dass sie diese CALL und nichts anderes beobachtet.

Wie in [2] erklärt, müssen wir folgende nop10 verwenden:
PF1 PF2 ESC NOPL MOD SIB DISP32 NOP10: 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00 -- cs nopw 0x00000000(%rax,%rax,1)

was bedeutet, dass wir das Präfix 0x2e erlauben müssen, das in der Funktion is_prefix_bad dem Attribut INAT_PFX_CS zugeordnet ist.

Außerdem wird der uprobe-Systemaufruf-Fehler bei Aufrufen außerhalb des uprobe-Trampolins auf -EPROTO geändert, sodass wir den behobenen Kernel erkennen können.

Die Leistung optimierter uprobes bleibt gleich:

uprobe-nop : 3,129 ± 0,013 M/s uprobe-push : 3,045 ± 0,006 M/s uprobe-ret : 1,095 ± 0,004 M/s --> uprobe-nop10 : 7,170 ± 0,020 M/s uretprobe-nop : 2,143 ± 0,021 M/s uretprobe-push : 2,090 ± 0,000 M/s uretprobe-ret : 0,942 ± 0,000 M/s --> uretprobe-nop10: 3,381 ± 0,003 M/s usdt-nop : 3,245 ± 0,004 M/s --> usdt-nop10 : 7,256 ± 0,023 M/s

[1] https://lore.kernel.org/bpf/[email protected]/
[2] https://lore.kernel.org/bpf/[email protected]/#t

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Zuständig

Linux

Reservieren

17.09.2026

Veröffentlichung

18.09.2026

Moderieren

akzeptiert

Eintrag

VDB-407158

CPE

bereit

EPSS

0.00189

KEV

nein

Aktivitäten

very low

Quellen

Might our Artificial Intelligence support you?

Check our Alexa App!