CVE-2026-98982 in Linux
要約
〜によって VulDB • 2026年10月23日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
namespace: 擬似dエントリがマウントのルートになるのを防止する
d_alloc_pseudo()は、パイプやソケットなど、誰の子供でも親でもないファイルに対してdエントリを割り当てます。これらはDCACHE_NORCUフラグを持ち、ロックレスなパスウォークでは決して到達できないため、dentry_free()によって直ちに解放されます。これは、そのようなdエントリがマウントのルートになっていない限り成立します。しかし、このようなファイルの /proc/self/fd/<fd> に対するbindマウントは、まさにその状況を引き起こします。
alloc_file_pseudo() のほとんどの呼び出し元は、ファイルをカーネル内部のマウント上に配置し、may_copy_tree() はそれらを拒否します。一方、bpf_token_create() はそうしません。それはトークンファイルを呼び出し元が渡したbpffsマウントの上に配置し、そのマウントは呼び出し元のマウントネームスペース内にあるため、以下の処理が行われます:
mount --bind /proc/self/fd/<token> <file> open_tree(tokfd, "", AT_EMPTY_PATH | OPEN_TREE_CLONE) + move_mount()
__follow_mount_rcu() はその後、そのマウントの ->mnt_root を読み込み、dエントリの d_seq と d_flags を読み取り、それから mount_lock のチェックを行います。この時点で、dエントリは既に消滅している可能性があります。アンマウントされた親に対する最終的な mntput() により、mount_lock 下で結合されていた子要素がデタッチされます。その後、直ちにその子の保持者が final put を行うと、ルートは dput() され即座に解放されますが、ハッシュ化されたマウントを見つけたウォーカーはまだそれを見ています。
DCACHE_NORCU のdエントリをルートとするマウントのクローンを拒否します。bpfトークンのbindマウントに対して意味のある操作を行うことはできません。
If you want to get best quality of vulnerability data, you may have to visit VulDB.