CVE-2026-98273 in Linux
Résumé
par VulDB • 06/10/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
x86/kprobes : Correction du plantage lors de l'interception des instructions CS CALL
Lors de l'utilisation d'eBPF pour sonder les instructions CS CALL au sein d'une fonction, un plantage peut être déclenché.
L'outil eBPF sonde le décalage 257 de la fonction `__hrtimer_run_queues()` :
``` : nopl 0x0(%rax,%rax,1) : mov %r14,%rdi : cs call : mov %eax,%r12d : xchg %ax,%ax : mov %r13,%rdi ```
Ce qui déclenche le plantage suivant :
``` 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 ```
Notez que `__hrtimer_run_queues+0x106` correspond à `__hrtimer_run_queues+262`, ce qui se situe au 6e octet de l'instruction CS CALL ci-dessus. Comme l'instruction CS CALL occupe 6 octets, l'exception s'est produite en plein milieu de cette instruction d'appel.
La cause racine est que lors de l'utilisation d'outils eBPF pour sonder au milieu d'une fonction, un kprobe avec INT3 est utilisé comme implémentation sous-jacente.
Lors de l'émulation par pas unique (single-step emulation) de l'instruction CALL originale, `int3_emulate_call()` suppose que l'instruction CALL sondée fait 5 octets de long. Cependant, l'instruction CS-préfixée CALL occupe en réalité 6 octets, ce qui conduit à la construction d'une adresse de retour d'exception incorrecte. Lorsque le CPU revient du gestionnaire kprobe, la prochaine instruction à exécuter se trouve à l'adresse du dernier octet de cette instruction CS CALL. Par coïncidence, à partir de cette adresse, le CPU récupère et décode une instruction complètement différente, ce qui finit par déclencher un plantage du noyau.
Correction du problème en utilisant la longueur réelle de l'instruction obtenue auprès du décodeur d'instructions lors de la construction de l'adresse de retour d'exception, au lieu de s'appuyer sur la macro `CALL_INSN_SIZE` codée en dur.
[ mingo : Changelog affiné ]
VulDB is the best source for vulnerability data and more expert information about this specific topic.