| Title | LinuxのLinux Kernelにおける解放済みメモリの使用に関する脆弱性 |
|---|---|
| Summary | Linuxカーネルでは、以下の脆弱性が修正されました。kthreadに関しては、use-after-freeを防ぐためにkthreadの終了パスを統合しました。Guillaume氏はKUnitテスト中に、破損したRCUコールバック関数ポインタによりクラッシュが発生したことを報告しました。そのクラッシュはpidfsのrhashtable変換に起因しており、24バイトのrb_nodeが構造体pid内で8バイトのrhash_headに置き換えられたため、160バイトから144バイトにサイズが縮小されました。CONFIG_BLK_CGROUPなしのstruct kthreadも144バイトになります。CONFIG_SLAB_MERGE_DEFAULTとSLAB_HWCACHE_ALIGNの設定により、両方とも192バイトに切り上げられ、同じスラブキャッシュを共有しています。struct pid.rcu.funcとstruct kthread.affinity_nodeは共にオフセット0x78に位置しています。kthreadがmake_task_dead()経由で終了するとkthread_exit()をバイパスし、affinity_nodeのクリーンアップを逃します。free_kthread_struct()はメモリを解放しますが、このノードはまだグローバルなkthread_affinity_listにリンクされたままになっています。別のkthreadによる後続のlist_del()が、解放され再利用されたメモリに対してダングリングリストポインタを書き込み、pidのrcu.funcポインタを破損させることがあります。free_kthread_struct()のパッチは未処理のクリーンアップに対応するものではなく、すべてのkthread終了パスを統合しました。kthread_exit()をdo_exit()を呼び出すマクロに変更し、PF_KTHREADフラグが設定されたタスクのdo_exit()から呼び出されるkthread_do_exit()を新たに追加しました。これにより、make_task_dead()、直接do_exit()、kthread_exit()のいずれの終了パスでもkthread固有のクリーンアップが必ず行われます。公開ヘッダでは__to_kthread()を新しいtsk_is_kthread()アクセサに置き換え、kthread_exit()マクロを使用するモジュールコードが必要とするため、do_exit()関数をエクスポートしています。 |
| Possible impacts | 当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 また、当該ソフトウェアが扱う全ての情報が書き換えられる可能性があります。 さらに、当該ソフトウェアが完全に停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 |
| Solution | リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 |
| Publication Date | May 8, 2026, midnight |
| Registration Date | May 25, 2026, 10:22 a.m. |
| Last Update | May 25, 2026, 10:22 a.m. |
| CVSS3.0 : 緊急 | |
| Score | 9.8 |
|---|---|
| Vector | CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Linux |
| Linux Kernel 6.14 以上 6.18.19 未満 |
| Linux Kernel 6.19 以上 6.19.9 未満 |
| Linux Kernel 7.0 |
| No | Changed Details | Date of change |
|---|---|---|
| 1 | [2026年05月25日] 掲載 |
May 25, 2026, 10:22 a.m. |
| Summary | In the Linux kernel, the following vulnerability has been resolved: kthread: consolidate kthread exit paths to prevent use-after-free Guillaume reported crashes via corrupted RCU callback function pointers struct kthread (without CONFIG_BLK_CGROUP) is also 144 bytes. With When a kthread exits via make_task_dead() it bypasses kthread_exit() and Instead of patching free_kthread_struct() to handle the missed cleanup, Replace __to_kthread() with a new tsk_is_kthread() accessor in the |
|---|---|
| Publication Date | May 9, 2026, 12:16 a.m. |
| Registration Date | May 9, 2026, 4:14 a.m. |
| Last Update | May 12, 2026, 11:10 p.m. |