CVE-2026-98273
In the Linux kernel, the following vulnerability has been resolved:
x86/kprobes: Fix crash when probing CS CALL instructions
When using eBPF to probe CS CALL instructions within a function, a crash can be triggered.
The eBPF tool probes offset 257 of the __hrtimer_run_queues() function:
<__hrtimer_run_queues+249>: nopl 0x0(%rax,%rax,1) <__hrtimer_run_queues+254>: mov %r14,%rdi <__hrtimer_run_queues+257>: cs call <__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
Which triggers this crash:
Leer descripción completaMostrar menos
Note that __hrtimer_run_queues+0x106 is __hrtimer_run_queues+262, which is at the 6th byte of the above CS CALL instruction. Since the CS CALL instruction occupies 6 bytes, the exception occurred in the middle of that call instruction.
The root cause is that when using eBPF tools to probe in the middle of a function, a kprobe with INT3 is used as the underlying implementation.
During single-step emulation of the original CALL instruction, int3_emulate_call() assumes that the probed CALL instruction is 5 bytes long. However, the actual CS-prefixed CALL instruction occupies 6 bytes, so it constructs an incorrect exception return address. When the CPU returns from the kprobe handler, the next instruction to be executed is at the address of the last byte of that CS CALL instruction. Coincidentally, starting from that address, the CPU fetches and decodes a completely different instruction, which ultimately triggers a kernel crash.
Fix the issue by using the actual instruction length obtained from the instruction decoder when constructing the exception return address, rather than relying on the hardcoded CALL_INSN_SIZE macro.
[ mingo: Refined the changelog ]
Detalles técnicos trazas, registros y código del informe original
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
CVSS
NVD no ha asignado puntuación CVSS a esta CVE (habitual desde el cambio de política de abril de 2026).
Probabilidad de explotación (EPSS)
- Probabilidad de explotación en los próximos 30 días: 0.17%
- Percentil entre todas las CVEs puntuadas: 6
- Fecha de la puntuación: 6/10/2026
EPSS (Exploit Prediction Scoring System, de FIRST) estima la probabilidad de que una vulnerabilidad sea explotada en 30 días. Complementa a CVSS (impacto) y a CISA KEV (explotación confirmada).
Tecnologías afectadas (1)
⚠ Inferidas por IA a partir de la descripción — NVD aún no ha analizado esta CVE; no son CPE verificados.
Referencias
JSON original (NVD)
Mostrar
{
"id": "CVE-2026-98273",
"cveTags": [],
"metrics": {},
"affected": [
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"affectedData": [
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "6256e668b7af9d81472e03c6a171630c08f8858a",
"lessThan": "cfc1af3d054aaabee08f1f77c441b3533b082869",
"versionType": "git"
},
{
"status": "affected",
"version": "6256e668b7af9d81472e03c6a171630c08f8858a",
"lessThan": "d8c6a18c0552135cbf0c696c9019b2979d0862c9",
"versionType": "git"
},
{
"status": "affected",
"version": "6256e668b7af9d81472e03c6a171630c08f8858a",
"lessThan": "a5f7a5bb3b7f28ba7e4fa246775b29a0e5537255",
"versionType": "git"
},
{
"status": "affected",
"version": "ba7d1dae9fe866abe74bb1e849fb85983b7c4c37",
"versionType": "git"
},
{
"status": "affected",
"version": "5.10.190",
"lessThan": "5.11",
"versionType": "semver"
}
],
"programFiles": [
"arch/x86/include/asm/text-patching.h",
"arch/x86/kernel/alternative.c",
"arch/x86/kernel/kprobes/core.c"
],
"defaultStatus": "unaffected"
},
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"product": "Linux",
"versions": [
{
"status": "affected",
"version": "5.13"
},
{
"status": "unaffected",
"version": "0",
"lessThan": "5.13",
"versionType": "semver"
},
{
"status": "unaffected",
"version": "6.18.54",
"versionType": "semver",
"lessThanOrEqual": "6.18.*"
},
{
"status": "unaffected",
"version": "7.2.8",
"versionType": "semver",
"lessThanOrEqual": "7.2.*"
},
{
"status": "unaffected",
"version": "7.3-rc4",
"versionType": "original_commit_for_fix",
"lessThanOrEqual": "*"
}
],
"programFiles": [
"arch/x86/include/asm/text-patching.h",
"arch/x86/kernel/alternative.c",
"arch/x86/kernel/kprobes/core.c"
],
"defaultStatus": "affected"
}
]
}
],
"published": "2026-10-06T09:18:16.937",
"references": [
{
"url": "https://git.kernel.org/stable/c/a5f7a5bb3b7f28ba7e4fa246775b29a0e5537255",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/cfc1af3d054aaabee08f1f77c441b3533b082869",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/d8c6a18c0552135cbf0c696c9019b2979d0862c9",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}
],
"vulnStatus": "Received",
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nx86/kprobes: Fix crash when probing CS CALL instructions\n\nWhen using eBPF to probe CS CALL instructions within a function,\na crash can be triggered.\n\nThe eBPF tool probes offset 257 of the __hrtimer_run_queues()\nfunction:\n\n<__hrtimer_run_queues+249>: nopl 0x0(%rax,%rax,1)\n<__hrtimer_run_queues+254>: mov %r14,%rdi\n<__hrtimer_run_queues+257>: cs call <__x86_indirect_thunk_r12>\n<__hrtimer_run_queues+263>: mov %eax,%r12d\n<__hrtimer_run_queues+266>: xchg %ax,%ax\n<__hrtimer_run_queues+268>: mov %r13,%rdi\n\nWhich triggers this crash:\n\n BUG: unable to handle page fault for address: 00000000000f41c9\n #PF: supervisor write access in kernel mode\n #PF: error_code(0x0002) - not-present page\n PGD 0 P4D 0\n Oops: 0002 [#1] SMP NOPTI\n CPU: 1 PID: 0 Comm: swapper/1 Kdump: loaded Tainted: P\n RIP: 0010:__hrtimer_run_queues+0x106/0x230\n\nNote that __hrtimer_run_queues+0x106 is __hrtimer_run_queues+262, which is\nat the 6th byte of the above CS CALL instruction. Since the CS CALL\ninstruction occupies 6 bytes, the exception occurred in the middle of that\ncall instruction.\n\nThe root cause is that when using eBPF tools to probe in the middle of a\nfunction, a kprobe with INT3 is used as the underlying implementation.\n\nDuring single-step emulation of the original CALL instruction,\nint3_emulate_call() assumes that the probed CALL instruction is 5 bytes\nlong. However, the actual CS-prefixed CALL instruction occupies 6 bytes,\nso it constructs an incorrect exception return address. When the CPU\nreturns from the kprobe handler, the next instruction to be executed is at\nthe address of the last byte of that CS CALL instruction. Coincidentally,\nstarting from that address, the CPU fetches and decodes a completely\ndifferent instruction, which ultimately triggers a kernel crash.\n\nFix the issue by using the actual instruction length obtained from\nthe instruction decoder when constructing the exception return\naddress, rather than relying on the hardcoded CALL_INSN_SIZE macro.\n\n[ mingo: Refined the changelog ]"
}
],
"lastModified": "2026-10-06T09:18:16.937",
"sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}