CVE-2026-98995 in Linux
要約
〜によって VulDB • 2026年10月23日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
namespace: `mnt_change_mountpoint()` における古い親の `->overmount` のリセット
`__umount_mnt()` は、マウントポイントがアンマウントされる際に、それをオーバーマウントしている親の `->overmount` をリセットします。しかし、`mnt_change_mountpoint()` はそうしません。これはマウントを新しい親に移動し、古い親は依然としてそれ(旧マウント)を指したままになります。
`attach_recursive_mnt()` 内で下方へ移動されるようなマウントの場合、この動作には問題ありません。なぜなら、古いトップレベルのマウントがそれに移動されるときまでに、新しいマウントはすでに古い親の `->overmount` をリセットしているからです。
しかし、`reparent()` の場合には影響があります。`propagate_umount()` は、アンマウントされない最初の祖先へ生存しているオーバーマウントを移動します。その後、そのマウントが取り除かれた元のマウントは直ちにアンマウントされます。もしファイル記述子がこのアンマウントされたマウントを生かし続けている場合、`->overmount` は移動後のマウントを指すことになります。これはダングリングポインタであり、UAF(Use-After-Free)脆弱性となります。なぜなら、移動後のマウントはその後アンマウントされ、解放されるからです。
`do_lock_mount()` は `mount_lock` の下でターゲットパスから `->overmount` を追跡します。そのようなマウントへのファイル記述子が存在し、それが最上位のオーバーマウント (`topmost_overmount()`) よりも下のマウントのターゲットとして使用されると、解放されたマウント内へ侵入してしまい、`do_lock_mount()` はそこで見つかったものに対して参照カウントを取得しようとします。
したがって、`__umount_mnt()` が行うのと同じ方法で `mnt_change_mountpoint()` において古い親の `->overmount` をリセットする必要があります。これにより、マウントの `->overmount` は常にそれに取り付けられたマウントであることが保証されます。
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.