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

Linuxカーネルにおいて、以下の脆弱性が修正されました。tcpのリスナー移行後にsk_data_ready()を呼び出すinet_csk_listen_stop()が、確立された子ソケットを終了中のリスナーから同じSO_REUSEPORTグループ内の別ソケットへ移行する際、対象リスナーはinet_csk_reqsk_queue_add()経由で新しいacceptキューエントリを取得しますが、その経路では対象リスナーの待機者に通知が一切行われません。ノンブロッキングのaccept()はキューを直接確認するため動作しますが、poll()/epoll_wait()の待機者やブロッキングaccept()の呼び出し元は無期限にスリープ状態のままになる可能性があります。inet_csk_listen_stop()内で移行が成功した後にREAD_ONCE(nsk-sk_data_ready)(nsk)を呼び出すようにしました。しかしながら、inet_csk_reqsk_queue_add()の成功後、reuseport_migrate_sock()で取得された参照は実質的にnreq-rsk_listenerに移行します。別のCPUがaccept()またはリスナーのシャットダウンを介してnreqをデキューし、reqsk_put()を実行してそのリスナー参照を解放する可能性があります。リスナーはSOCK_RCU_FREEであるため、queue_add()後のnskの参照解除はrcu_read_lock()/rcu_read_unlock()でラップし、その経路の既存sock_net(nsk)アクセスもカバーしています。reqsk_timer_handler()パスには以下の2つの理由で同様の変更は不要です。半開要求は最終ACK後にのみ読み取り可能となり、tcp_child_process()が既にリスナーを起こすこと、およびnreqがinet_ehash_insert()を通じて可視化された後、成功した経路はもはや直接nskに触れなくなることです。

Possible impacts ・当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 ・当該ソフトウェアが扱う全ての情報が書き換えられる可能性があります。 ・当該ソフトウェアが完全に停止する可能性があります。 
Solution

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

Publication Date May 27, 2026, midnight
Registration Date June 17, 2026, 3:42 p.m.
Last Update June 17, 2026, 3:42 p.m.
CVSS3.0 : 重要
Score 7.8
Vector CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Affected System
Linux
Linux Kernel 5.14 以上 5.15.209 未満
Linux Kernel 5.16 以上 6.1.175 未満
Linux Kernel 6.13 以上 6.18.27 未満
Linux Kernel 6.19 以上 7.0.4 未満
Linux Kernel 6.2 以上 6.6.140 未満
Linux Kernel 6.7 以上 6.12.86 未満
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
その他
Change Log
No Changed Details Date of change
1 [2026年06月17日]
  掲載
June 17, 2026, 3:42 p.m.

NVD Vulnerability Information
CVE-2026-46015
Summary

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

tcp: call sk_data_ready() after listener migration

When inet_csk_listen_stop() migrates an established child socket from
a closing listener to another socket in the same SO_REUSEPORT group,
the target listener gets a new accept-queue entry via
inet_csk_reqsk_queue_add(), but that path never notifies the target
listener's waiters. A nonblocking accept() still works because it
checks the queue directly, but poll()/epoll_wait() waiters and
blocking accept() callers can also remain asleep indefinitely.

Call READ_ONCE(nsk->sk_data_ready)(nsk) after a successful migration
in inet_csk_listen_stop().

However, after inet_csk_reqsk_queue_add() succeeds, the ref acquired
in reuseport_migrate_sock() is effectively transferred to
nreq->rsk_listener. Another CPU can then dequeue nreq via accept()
or listener shutdown, hit reqsk_put(), and drop that listener ref.
Since listeners are SOCK_RCU_FREE, wrap the post-queue_add()
dereferences of nsk in rcu_read_lock()/rcu_read_unlock(), which also
covers the existing sock_net(nsk) access in that path.

The reqsk_timer_handler() path does not need the same changes for two
reasons: half-open requests become readable only after the final ACK,
where tcp_child_process() already wakes the listener; and once nreq is
visible via inet_ehash_insert(), the success path no longer touches
nsk directly.

Publication Date May 27, 2026, 11:17 p.m.
Registration Date May 28, 2026, 4:12 a.m.
Last Update June 2, 2026, 2:17 a.m.
Related information, measures and tools
Common Vulnerabilities List