製品・ソフトウェアに関する情報
LinuxのLinux Kernelにおける不特定の脆弱性
Title LinuxのLinux Kernelにおける不特定の脆弱性
Summary

Linuxカーネルにおいて、以下の脆弱性が修正されました:eventfsにおけるremount時にイベントを移動する際、eventfs_mutexとSRCUを適切に保持しなかった問題です。コミット340f0c7067a9("eventfs: Update all the eventfs_inodes from the events descriptor")では、eventfs_set_attrs()がremount時にei-childrenを再帰的にたどっていました。この処理はtracefs_apply_options()がtracefs_inodes上でrcu_read_lock()のみを保持して取得しており、不適切でした。具体的には、ei-childrenに対するlist_for_each_entryがeventfs_remove_rec()内のlist_del_rcu()と競合し、LIST_POISON1の参照違反を引き起こしていました(d2603279c7d6と同様の形態です)。さらに、eventfs_inodesはcall_srcu(&eventfs_srcu, ...)を介して解放されるため、rcu_read_lock()はSRCUの猶予期間を延長せず、走査中にti-privateが解放される可能性がありました。また、ei-attrへの書き込みはeventfs_mutexを保持するeventfs_set_attr()と競合していました。再現手順としては、無限ループでmount -o remount,uid=$((RANDOM%1000)) /sys/kernel/tracingを実行しつつ、別の無限ループでkprobe_eventsに対してイベント登録と解除を繰り返します。tracefs_apply_options()のevents部分はeventfs_mutexとsrcu_read_lock(&eventfs_srcu)を取得するeventfs_remount_lock()/_unlock()でラップされました。eventfs_set_attrs()はスリープしないため、ネストされたrcu_read_lock()の使用は問題なく、lockdep_assert_held()によって契約が担保されています。tracefs_drop_inode()のコメントには「RCUサイクル」と記されていましたが、実際にはSRCUが使用されていました。

Possible impacts ・当該ソフトウェアが扱う情報について、外部への漏えいは発生しません。 ・当該ソフトウェアが扱う情報について、書き換えは発生しません。 ・当該ソフトウェアが完全に停止する可能性があります。 
Solution

リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。

Publication Date May 28, 2026, midnight
Registration Date June 26, 2026, 11:58 a.m.
Last Update June 26, 2026, 11:58 a.m.
CVSS3.0 : 警告
Score 5.5
Vector CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Affected System
Linux
Linux Kernel 6.13 以上 6.18.30 未満
Linux Kernel 6.19 以上 7.0.7 未満
Linux Kernel 6.6.35 以上 6.6.140 未満
Linux Kernel 6.9.6 以上 6.12.88 未満
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
その他
Change Log
No Changed Details Date of change
1 [2026年06月26日]
  掲載
June 26, 2026, 11:58 a.m.

NVD Vulnerability Information
CVE-2026-46106
Summary

In the Linux kernel, the following vulnerability has been resolved:

eventfs: Hold eventfs_mutex and SRCU when remount walks events

Commit 340f0c7067a9 ("eventfs: Update all the eventfs_inodes from the
events descriptor") had eventfs_set_attrs() recurse through ei->children
on remount. The walk only holds the rcu_read_lock() taken by
tracefs_apply_options() over tracefs_inodes, which is wrong:

- list_for_each_entry over ei->children races with the list_del_rcu()
in eventfs_remove_rec() -- LIST_POISON1 deref, same shape as
d2603279c7d6.
- eventfs_inodes are freed via call_srcu(&eventfs_srcu, ...).
rcu_read_lock() does not extend an SRCU grace period, so ti->private
can be reclaimed under the walk.
- The writes to ei->attr race with eventfs_set_attr(), which holds
eventfs_mutex.

Reproducer:

while :; do mount -o remount,uid=$((RANDOM%1000)) /sys/kernel/tracing; done &
while :; do
echo "p:kp submit_bio" > /sys/kernel/tracing/kprobe_events
echo > /sys/kernel/tracing/kprobe_events
done

Wrap the events portion of tracefs_apply_options() in
eventfs_remount_lock()/_unlock() that take eventfs_mutex and
srcu_read_lock(&eventfs_srcu). eventfs_set_attrs() doesn't sleep so the
nested rcu_read_lock() is fine; lockdep_assert_held() pins the contract.

Comment in tracefs_drop_inode() said "RCU cycle" -- it is SRCU.

Publication Date May 28, 2026, 7:16 p.m.
Registration Date May 29, 2026, 4:12 a.m.
Last Update May 28, 2026, 10:44 p.m.
Related information, measures and tools
Common Vulnerabilities List