CVE-2026-98801 in Linux
要約
〜によって VulDB • 2026年10月18日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
net: SO_RESERVE_MEMをTCPソケットに制限し、最大値に上限を設定する
コミット 2bb2f5fb21b0(「net: add new socket option SO_RESERVE_MEM」)および コミット d00c8ee31729(「net: fix possible NULL deref in sock_reserve_memory」)は、TCPソケットとUDPソケットの両方で真となる sk_has_account(sk) のみをチェックしていました。
しかし、SO_RESERVE_MEM および sk_unused_reserved_mem() は現在 TCP でのみサポートされています: - UDPソケットでは、sk->sk_forward_alloc は sk->sk_receive_queue.lock によって保護されますが、sock_reserve_memory() と sock_release_reserved_memory() は lock_sock(sk) のみを取得します。並行したUDPパケットの受信/解放と setsockopt(SO_RESERVE_MEM) が sk_forward_alloc および memcg アカウントを破損させます。 - udp_rmem_release() は、sk_unused_reserved_mem(sk) を考慮せずに過剰な sk_forward_alloc を回収します。
当面の間、sock_reserve_memory() を TCPソケット (sk_is_tcp(sk)) のみに制限します。UDP に対する SO_RESERVE_MEM のサポート(sk_receive_queue.lock の取得および udp_rmem_release() で sk_unused_reserved_mem() を尊重すること)は、必要に応じて将来の net-next シリーズで実装可能です。
さらに、sk_setsockopt(SO_RESERVE_MEM) において val > SZ_1G の場合に -EINVAL を返すようにしました。上限がない場合、INT_MAX に近い値が sk_mem_pages(delta) および (pages << PAGE_SHIFT) で32ビット符号付き整数のオーバーフローを引き起こし、sk->sk_forward_alloc と sk->sk_reserved_mem を破損させます。ページアラインされた上限(SZ_1G)を使用することで、getsockopt(SO_RESERVE_MEM) によって報告されるページ単位の sk->sk_reserved_mem が常に setsockopt(SO_RESERVE_MEM) に再渡可能になることが保証されます。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.