CVE-2026-98273
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
x86/kprobes: Naprawiono awarię podczas sondowania instrukcji CS CALL
Używając eBPF do sondowania instrukcji CS CALL w ramach funkcji,
może nastąpić awaria.
Narzędzie eBPF sonduje offset 257 funkcji __hrtimer_run_queues()
funkcja:
<__hrtimer_run_queues+249>: nopl 0x0(%rax,%rax,1)
<__hrtimer_run_queues+254>: mov %r14,%rdi
<__hrtimer_run_queues+257>: wywołanie cs <__x86_indirect_thunk_r12>
<__hrtimer_run_queues+263>: mov %eax,%r12d
<__hrtimer_run_queues+266>: xchg %ax,%ax
<__hrtimer_run_queues+268>: mov %r13,%rdi
Co powoduje tę awarię:
BŁĄD: nie można obsłużyć błędu strony dla adresu: 00000000000f41c9
#PF: dostęp do zapisu nadzorcy w trybie jądra
#PF: kod_błędu(0x0002) - nie ma strony
PGD 0 P4D 0
Ups: 0002 [#1] SMP NOPTI
Procesor: 1 PID: 0 Comm: swapper/1 Kdump: załadowany Tainted: P
RIP: 0010:__hrtimer_run_queues+0x106/0x230
Zauważ, że __hrtimer_run_queues+0x106 to __hrtimer_run_queues+262, czyli
na 6. bajcie powyższej instrukcji CS CALL. Od czasu CS CALL
instrukcja zajmuje 6 bajtów, w środku wystąpił wyjątek
instrukcja wywołania.
Główną przyczyną jest to, że podczas używania narzędzi eBPF do sondowania w środku pliku a
jako podstawową implementację używana jest kprobe z INT3.
Podczas jednoetapowej emulacji oryginalnej instrukcji CALL,
int3_emulate_call() zakłada, że sprawdzana instrukcja CALL ma 5 bajtów
długi. Jednakże rzeczywista instrukcja CALL z prefiksem CS zajmuje 6 bajtów,
więc konstruuje niepoprawny adres zwrotny wyjątku. Kiedy procesor
wraca z procedury obsługi kprobe, następna instrukcja do wykonania znajduje się pod adresem
adres ostatniego bajtu instrukcji CS CALL. Przypadkowo,
zaczynając od tego adresu, procesor pobiera i dekoduje całkowicie
inną instrukcję, co ostatecznie powoduje awarię jądra.
Napraw problem, używając rzeczywistej długości instrukcji uzyskanej z
dekoder instrukcji podczas konstruowania powrotu wyjątku
adres, zamiast polegać na zakodowanym na stałe makrze CALL_INSN_SIZE.
[ mingo: Udoskonalono dziennik zmian ]
>_ Referencje
Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.
This product uses the NVD API but is not endorsed or certified by the NVD.
Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.
CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.
NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org