製品・ソフトウェアに関する情報
LinuxのLinux Kernelにおける解放済みメモリの使用に関する脆弱性
Title LinuxのLinux Kernelにおける解放済みメモリの使用に関する脆弱性
Summary

Linuxカーネルにおいて、以下の脆弱性が修正されました。mptcpにおける__inet_lookup_establishedのslab-use-after-free問題が修正されました。ehashテーブルのルックアップはロックレスで行われ、RCUリードサイドクリティカルセクション中のソケットメモリの安定性を保証するためにSLAB_TYPESAFE_BY_RCUに依存しています。tcp_protおよびtcpv6_protはいずれもproto_register()を通じてこのフラグ付きでスラブキャッシュを作成します。しかし、MPTCPのmptcp_subflow_init()はinet_init()(fs_initcall、レベル5)中にtcpv6_protをtcpv6_prot_overrideにコピーしますが、inet6_init()(module_init/device_initcall、レベル6)がproto_register(&tcpv6_prot)を呼び出す前であるため、その時点でtcpv6_prot.slabはまだNULLであり、結果としてtcpv6_prot_override.slabは永続的にNULLのままになります。これにより、MPTCPのIPv6サブフロウの子ソケットはTCPv6スラブキャッシュではなくkmalloc(kmalloc-4kに該当)で割り当てられます。kmalloc-4kキャッシュはSLAB_TYPESAFE_BY_RCUを欠いているため、子ソケット用に設計上解除されているSOCK_RCU_FREEなしでこれらのソケットが解放されると、メモリが即座に再利用可能になります。その結果、rcu_read_lock下の同時ehashルックアップが解放済みメモリにアクセスし、__inet_lookup_establishedでslab-use-after-freeが発生します。この問題を修正するため、IPv6固有の初期化処理をmptcp_subflow_init()から新たなmptcp_subflow_v6_init()に分割し、プロトコル登録前にmptcp_proto_v6_init()から呼び出すようにしました。これによりtcpv6_prot_override.slabが正しくSLAB_TYPESAFE_BY_RCUスラブキャッシュを継承することが保証されます。

Possible impacts 当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 また、当該ソフトウェアが扱う全ての情報が書き換えられる可能性があります。 さらに、当該ソフトウェアが完全に停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 
Solution

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

Publication Date April 24, 2026, midnight
Registration Date April 30, 2026, 12:31 p.m.
Last Update April 30, 2026, 12:31 p.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
Affected System
Linux
Linux Kernel 5.12
Linux Kernel 5.12.1 以上 5.15.203 未満
Linux Kernel 5.16 以上 6.1.169 未満
Linux Kernel 6.13 以上 6.18.23 未満
Linux Kernel 6.19 以上 6.19.13 未満
Linux Kernel 6.2 以上 6.6.135 未満
Linux Kernel 6.7 以上 6.12.82 未満
Linux Kernel 7.0
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
その他
Change Log
No Changed Details Date of change
1 [2026年04月30日]
  掲載
April 30, 2026, 12:31 p.m.

NVD Vulnerability Information
CVE-2026-31669
Summary

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

mptcp: fix slab-use-after-free in __inet_lookup_established

The ehash table lookups are lockless and rely on
SLAB_TYPESAFE_BY_RCU to guarantee socket memory stability
during RCU read-side critical sections. Both tcp_prot and
tcpv6_prot have their slab caches created with this flag
via proto_register().

However, MPTCP's mptcp_subflow_init() copies tcpv6_prot into
tcpv6_prot_override during inet_init() (fs_initcall, level 5),
before inet6_init() (module_init/device_initcall, level 6) has
called proto_register(&tcpv6_prot). At that point,
tcpv6_prot.slab is still NULL, so tcpv6_prot_override.slab
remains NULL permanently.

This causes MPTCP v6 subflow child sockets to be allocated via
kmalloc (falling into kmalloc-4k) instead of the TCPv6 slab
cache. The kmalloc-4k cache lacks SLAB_TYPESAFE_BY_RCU, so
when these sockets are freed without SOCK_RCU_FREE (which is
cleared for child sockets by design), the memory can be
immediately reused. Concurrent ehash lookups under
rcu_read_lock can then access freed memory, triggering a
slab-use-after-free in __inet_lookup_established.

Fix this by splitting the IPv6-specific initialization out of
mptcp_subflow_init() into a new mptcp_subflow_v6_init(), called
from mptcp_proto_v6_init() before protocol registration. This
ensures tcpv6_prot_override.slab correctly inherits the
SLAB_TYPESAFE_BY_RCU slab cache.

Publication Date April 25, 2026, 12:16 a.m.
Registration Date April 25, 2026, 4:08 a.m.
Last Update April 28, 2026, 12:16 a.m.
Related information, measures and tools
Common Vulnerabilities List