JVNDB-2026-025911 | |
LinuxのLinux Kernelにおける到達可能なアサーションに関する脆弱性 | |
| 概要 | |
Linuxカーネルにおいて、以下の脆弱性が修正されました。KVMのioeventfd datamatch内に存在していた、ゲストがトリガー可能なBUG_ON()はget_unaligned()に置き換えられました。これは、2009年に最初に追加されて以来到達可能だったBUG_ON()を削除し、代わりにget_unaligned()を使用して潜在的にアラインメントされていないアクセスを行うためです。特定のストアに対して、KVM x86のエミュレータは宛先オペランドであるx86_emulate_ctxt.dst内の全値を追跡します。宛先がメモリで、ターゲットが複数のページに分割されているか、エミュレーションされたMMIOの場合、KVMは各フラグメントを独立して処理します。例えば、ページの分割がページオフセット0xffcで始まる場合、KVMは最初のページに4バイトを書き込み、残りのバイトを2番目のページに書き込みます。このとき、ctxt->dstを両方の書き込み元として、適切なオフセット付きで使用します。もし宛先がページを分割し、かつ2番目のページでエミュレートされたMMIOにヒットした場合、KVMはまず最初のページへの書き込みを完了し、その後2番目のページのMMIOアクセスをエミュレートします。2番目のページのオフセット0にdatamatchが有効なioeventfdが存在する場合、KVMは残りのストアを潜在的なioeventfdシグナルとして処理します。まとめると、ゲストがページオフセットNでページを分割するストアを発行し、2番目のページのオフセット0にdatamatchが有効なioeventfdがある場合、KVMは&dst.valptr[N]をソースとしてdatamatchをチェックします。dst(およびdst.valptr)が32バイト境界で整列しているため、もしNが@lenに整列していなければBUG_ON()が発動します。例えば、16バイトのストアがページオフセット0xffcにあり、長さ8のioeventfdに対して、ioeventfd_in_range()のすべての初期チェックは成功しますが、BUG_ON()は@valが4バイト整列だが8バイト整列していないため発動します。------------[ ここから切り取り ]------------kernel BUG at arch/x86/kvm/../../../virt/kvm/eventfd.c:783!Oops: invalid opcode: 0000 [#1] SMPCPU: 0 UID: 1000 PID: 615 Comm: repro Not tainted 7.1.0-rc2-ff238429d1ea #365 PREEMPTHardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015RIP: 0010:ioeventfd_write+0x6c/0x70 [kvm]Call Trace: <TASK> __kvm_io_bus_write+0x85/0xb0 [kvm] kvm_io_bus_write+0x53/0x80 [kvm] vcpu_mmio_write+0x66/0xf0 [kvm] emulator_read_write_onepage+0x12a/0x540 [kvm] emulator_read_write+0x109/0x2b0 [kvm] x86_emulate_insn+0x4f8/0xfb0 [kvm] x86_emulate_instruction+0x181/0x790 [kvm] kvm_mmu_page_fault+0x313/0x630 [kvm] vmx_handle_exit+0x18a/0x590 [kvm_intel] kvm_arch_vcpu_ioctl_run+0xc81/0x1c90 [kvm] kvm_vcpu_ioctl+0x2d5/0x970 [kvm] __x64_sys_ioctl+0x8a/0xd0 do_syscall_64+0xb7/0x890 entry_SYSCALL_64_after_hwframe+0x4b/0x53RIP: 0033:0x7f19c931a9bf </TASK>Modules linked in: kvm_intel kvm irqbypass---[ end trace 0000000000000000 ]---理想的には、修正は単にBUG_ON()を削除することです。しかし、KVM x86はCPL0での「通常の」メモリアクセスに対してアラインメントチェックを行わないため、この方法は完全な解決にはなりません。残念ながらC99規格が問題を引き起こしています。x86アーキテクチャは親切に動作しますが、アラインメントされていないポインタを直接デリファレンスすることはC言語において未定義動作とされており、CONFIG_UBSAN_ALIGNMENT=yを有効にしている場合にクラッシュを引き起こします。 | |
| CVSS による深刻度 (CVSS とは?) | |
|
CVSS v3 による深刻度
基本値: 7.1 (重要) [その他]
| |
| 影響を受けるシステム | |
|
| |
Linux | |
|
| |
| 想定される影響 | |
・当該ソフトウェアが扱う情報について、外部への漏えいは発生しません。 | |
| 対策 | |
リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 | |
| ベンダ情報 | |
|
| |
| CWEによる脆弱性タイプ一覧 CWEとは? | |
| |
| 共通脆弱性識別子(CVE) CVEとは? | |
|
| |
| 参考情報 | |
| |
| 更新履歴 | |
|
| 公表日 | 2026/07/19 |
| 登録日 | 2026/07/30 |
| 最終更新日 | 2026/07/30 |



