| タイトル | LinuxのLinux Kernelにおける解放済みメモリの使用に関する脆弱性 |
|---|---|
| 概要 | Linuxカーネルにおいて、以下の脆弱性が修正されました。cxl/portのcxl_detach_ep()におけるparent_portの使用後解放の問題を修正しました。cxl_detach_ep()は、スイッチポート配下のすべてのCXLメモリデバイスが削除された際にボトムアップ削除処理として呼び出されます。階層内の各ポートに対して、そのポートと親ポートの両方をロックし、エンドポイントを削除します。ポートが空になった場合は死んだ状態とマークし、delete_switch_port()を呼び出してポートの登録解除を行います。この処理中にparent_portが解放後に使用される可能性がある箇所が2つ存在します。1つ目は、同時にデタッチが進行している場合です。bus_find_device()で2番目の作業者がポートを見つけた時点で既にそのポートが処理済みの場合、parent_portをピン留めしていなければport-deadの検出および親ポートのロック解除を試みる際にすでに解放されている可能性があります。プロダクション環境のカーネルではこれは無音のメモリ破損となり、ロックデバッグ有効時には以下のように現れます。[]DEBUG_LOCKS_WARN_ON(__owner_task(owner) != get_current()) []WARNING: kernel/locking/mutex.c:949 at __mutex_unlock_slowpath+0x1ee/0x310 []Call Trace: []mutex_unlock+0xd/0x20 []cxl_detach_ep+0x180/0x400 [cxl_core] []devm_action_release+0x10/0x20 []devres_release_all+0xa8/0xe0 []device_unbind_cleanup+0xd/0xa0 []really_probe+0x1a6/0x3e0です。2つ目はdelete_switch_port()がparent_portに登録された3つのdevmアクションを解放するときです。その最後のアクションであるunregister_port()が子ポートに対してdevice_unregister()を呼び出し、それが連鎖的に発生する可能性があります。もしparent_portもこの時点で空であれば、デバイスコアがそれも登録解除・解放してしまいます。したがってdelete_switch_port()の戻り時点でparent_portが解放されており、その後のdevice_unlock(&parent_port-dev)が解放済みメモリに対して操作を行います。カーネルログは上述と同様ですが、cxl_detach_ep()内のオフセットが異なります。これら2つの問題は、子ポートと親ポート間のライフタイム保証が欠如していることに起因します。ポートのライフタイムルールを確立し、子ポートは解放されるまで親デバイスの参照を保持するようにしました。ポート割り当て時に参照を取り、解放時に参照を解放します。これにより親は子のライフタイム全体で有効であることが保証され、cxl_detach_ep()での使用後解放の問題を排除できます。この問題はCXLデバイスが存在するQEMU上でcxl_acpiのリロードを行うことで容易に再現できます。 |
| 想定される影響 | 当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 また、当該ソフトウェアが扱う全ての情報が書き換えられる可能性があります。 さらに、当該ソフトウェアが完全に停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 |
| 対策 | リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 |
| 公表日 | 2026年4月22日0:00 |
| 登録日 | 2026年4月30日11:06 |
| 最終更新日 | 2026年4月30日11:06 |
| CVSS3.0 : 重要 | |
| スコア | 7.8 |
|---|---|
| ベクター | CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Linux |
| Linux Kernel 6.13 以上 6.18.21 未満 |
| Linux Kernel 6.19 以上 6.19.11 未満 |
| Linux Kernel 6.3 以上 6.12.80 未満 |
| Linux Kernel 7.0 |
| No | 変更内容 | 変更日 |
|---|---|---|
| 1 | [2026年04月30日] 掲載 |
2026年4月30日11:06 |
| 概要 | In the Linux kernel, the following vulnerability has been resolved: cxl/port: Fix use after free of parent_port in cxl_detach_ep() cxl_detach_ep() is called during bottom-up removal when all CXL memory First, a concurrent detach may have already processed a port by the []DEBUG_LOCKS_WARN_ON(__owner_task(owner) != get_current()) Second, delete_switch_port() releases three devm actions registered Both of these issues stem from the absence of a lifetime guarantee Establish a lifetime rule for ports: child ports hold a reference to This is easily reproduced with a reload of cxl_acpi in QEMU with CXL |
|---|---|
| 公表日 | 2026年4月22日23:16 |
| 登録日 | 2026年4月25日4:05 |
| 最終更新日 | 2026年4月29日2:53 |
| 構成1 | 以上 | 以下 | より上 | 未満 | |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.3 | 6.12.80 | |||
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.13 | 6.18.21 | |||
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.19 | 6.19.11 | |||
| cpe:2.3:o:linux:linux_kernel:7.0:rc1:*:*:*:*:*:* | |||||
| cpe:2.3:o:linux:linux_kernel:7.0:rc2:*:*:*:*:*:* | |||||
| cpe:2.3:o:linux:linux_kernel:7.0:rc3:*:*:*:*:*:* | |||||
| cpe:2.3:o:linux:linux_kernel:7.0:rc4:*:*:*:*:*:* | |||||
| cpe:2.3:o:linux:linux_kernel:7.0:rc5:*:*:*:*:*:* | |||||