LinuxのLinux Kernelにおける有効期限後のメモリの解放の欠如に関する脆弱性
タイトル LinuxのLinux Kernelにおける有効期限後のメモリの解放の欠如に関する脆弱性
概要

Linuxカーネルにおいて、以下の脆弱性が修正されました:sunrpcのcache_releaseにおけるcache_requestメモリリークの修正です。読み取り中にファイルディスクリプタが閉じられた場合(rp-offset != 0)、cache_release()はリクエストのreadersカウントをデクリメントしますが、リクエストを解放すべきかどうかを確認しません。cache_read()では、readersが0になり、かつCACHE_PENDINGがクリアされている場合、cache_requestはキューから削除され、バッファおよびcache_head参照と共に解放されますが、cache_release()にはこのクリーンアップ処理が欠けていました。readersが0のリクエストを解放するもう一つの経路はcache_dequeue()ですが、これはCACHE_PENDINGがセットからクリアに遷移したときのみ実行されます。もしその遷移がreadersが非ゼロの間に起きていた場合、cache_dequeue()はそのリクエストをスキップし、以降の呼び出しでもクリーンアップされません。これを解決するために、cache_release()にcache_read()のクリーンアップロジックを追加しました。readersをデクリメントした後、readersが0かつCACHE_PENDINGがクリアされているかをチェックし、条件を満たせばcache_requestをキューから外して解放します。

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

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

公表日 2026年4月3日0:00
登録日 2026年5月22日10:56
最終更新日 2026年5月22日10:56
CVSS3.0 : 警告
スコア 5.5
ベクター CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
影響を受けるシステム
Linux
Linux Kernel 2.6.12
Linux Kernel 2.6.12.1 以上 5.10.253 未満
Linux Kernel 5.11 以上 5.15.203 未満
Linux Kernel 5.16 以上 6.1.167 未満
Linux Kernel 6.13 以上 6.18.20 未満
Linux Kernel 6.19 以上 6.19.10 未満
Linux Kernel 6.2 以上 6.6.130 未満
Linux Kernel 6.7 以上 6.12.78 未満
Linux Kernel 7.0
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
その他
変更履歴
No 変更内容 変更日
1 [2026年05月22日]
  掲載
2026年5月22日10:56

NVD脆弱性情報
CVE-2026-31400
概要

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

sunrpc: fix cache_request leak in cache_release

When a reader's file descriptor is closed while in the middle of reading
a cache_request (rp->offset != 0), cache_release() decrements the
request's readers count but never checks whether it should free the
request.

In cache_read(), when readers drops to 0 and CACHE_PENDING is clear, the
cache_request is removed from the queue and freed along with its buffer
and cache_head reference. cache_release() lacks this cleanup.

The only other path that frees requests with readers == 0 is
cache_dequeue(), but it runs only when CACHE_PENDING transitions from
set to clear. If that transition already happened while readers was
still non-zero, cache_dequeue() will have skipped the request, and no
subsequent call will clean it up.

Add the same cleanup logic from cache_read() to cache_release(): after
decrementing readers, check if it reached 0 with CACHE_PENDING clear,
and if so, dequeue and free the cache_request.

公表日 2026年4月4日1:16
登録日 2026年4月15日11:24
最終更新日 2026年4月7日22:20
関連情報、対策とツール
共通脆弱性一覧