CVE-2026-98273 in Linux
Zusammenfassung
von VulDB • 06.10.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
x86/kprobes: Absturz bei der Untersuchung von CS-CALL-Anweisungen beheben
Bei der Verwendung von eBPF zur Untersuchung (Probing) von CS-CALL-Anweisungen innerhalb einer Funktion kann ein Systemabsturz ausgelöst werden.
Das eBPF-Tool untersucht den Offset 257 der Funktion `__hrtimer_run_queues()`:
``` : nopl 0x0(%rax,%rax,1) : mov %r14,%rdi : cs call : mov %eax,%r12d : xchg %ax,%ax : mov %r13,%rdi ```
Dies löst den folgenden Absturz aus:
``` BUG: unable to handle page fault for address: 00000000000f41c9 #PF: supervisor write access in kernel mode #PF: error_code(0x0002) - not-present page PGD 0 P4D 0 Oops: 0002 [#1] SMP NOPTI
CPU: 1 PID: 0 Comm: swapper/1 Kdump: loaded Tainted: P RIP: 0010:__hrtimer_run_queues+0x106/0x230 ```
Beachten Sie, dass `__hrtimer_run_queues+0x106` gleich `__hrtimer_run_queues+262` ist, was sich am sechsten Byte der obigen CS-CALL-Anweisung befindet. Da die CS-vorangestellte CALL-Anstellung 6 Bytes lang ist, trat die Ausnahme in der Mitte dieser Anweisung auf.
Die Ursache des Problems liegt darin, dass bei der Verwendung von eBPF-Tools zur Untersuchung (Probing) mitten in einer Funktion ein kprobe mit INT3 als zugrunde liegende Implementierung verwendet wird.
Während der Single-Step-Emulation der ursprünglichen CALL-Anweisung geht `int3_emulate_call()` davon aus, dass die untersuchte CALL-Anstellung 5 Bytes lang ist. Tatsächlich belegt jedoch die CS-präfixierte CALL-Anweisung 6 Bytes, sodass eine falsche Ausgabeadresse (exception return address) konstruiert wird. Wenn die CPU vom kprobe-Handler zurückkehrt, soll die nächste auszuführende Anweisung an der Adresse des letzten Bytes dieser CS-CALL-Anstellung ausgeführt werden. Zufälligerweise holt und decodiert die CPU ab dieser Adresse eine völlig andere Anweisung, was letztlich einen Kernel-Absturz auslöst.
Beheben Sie das Problem, indem Sie bei der Konstruktion der Ausgabeadresse (exception return address) die tatsächliche Anweisungslänge verwenden, die vom Anweisungsdecoder ermittelt wurde, anstatt sich auf den fest codierten Makro `CALL_INSN_SIZE` zu verlassen.
[ mingo: Changelog verfeinert ]
Be aware that VulDB is the high quality source for vulnerability data.