LinuxのLinux Kernelにおける不特定の脆弱性
タイトル LinuxのLinux Kernelにおける不特定の脆弱性
概要

Linuxカーネルにおいて、以下の脆弱性が修正されました。mctp: route: mctp_flow_prepare_output()内でkey-lockを保持していない問題です。mctp_flow_prepare_output()はkey-devをチェックし、場合によってはmctp_dev_set_key()を呼び出しますが、その処理中にkey-lockを保持していません。mctp_dev_set_key()およびmctp_dev_release_key()は__must_hold(&key-lock)で注釈されており、key-devへのアクセスはkey-lockによって直列化されることが意図されています。mctp_sendmsg()の送信パスはmctp_local_output() - mctp_dst_output()を経由してmctp_flow_prepare_output()に達しますが、この間にkey-lockを保持していないため、チェックと設定のシーケンスにレースコンディションがあります。例として、以下のインターリーブが考えられます。CPU0 CPU1 ---- ---- mctp_flow_prepare_output(key, devA) if (!key-dev) // NULLと認識 mctp_flow_prepare_output( key, devB) if (!key-dev) // まだNULL mctp_dev_set_key(devB, key) mctp_dev_hold(devB) key-dev = devB mctp_dev_set_key(devA, key) mctp_dev_hold(devA) key-dev = devA // devBを上書きになります。これによりdevAとdevBの参照が両方取得されますが、最終的なkey-devの値だけが解放のために追跡されます。これによって、1つの参照が失われ、mctp_dev_release_key()が1つのdevの参照しか減らさないため、リソースリークが発生する可能性があります。解決策として、key-devのチェックおよびmctp_dev_set_key()の呼び出しの前後でkey-lockを保持するようにしました。

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

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

公表日 2026年5月8日0:00
登録日 2026年5月22日10:53
最終更新日 2026年5月22日10:53
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 5.16 以上 6.1.167 未満
Linux Kernel 6.13 以上 6.18.19 未満
Linux Kernel 6.19 以上 6.19.9 未満
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:53

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

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

mctp: route: hold key->lock in mctp_flow_prepare_output()

mctp_flow_prepare_output() checks key->dev and may call
mctp_dev_set_key(), but it does not hold key->lock while doing so.

mctp_dev_set_key() and mctp_dev_release_key() are annotated with
__must_hold(&key->lock), so key->dev access is intended to be
serialized by key->lock. The mctp_sendmsg() transmit path reaches
mctp_flow_prepare_output() via mctp_local_output() -> mctp_dst_output()
without holding key->lock, so the check-and-set sequence is racy.

Example interleaving:

CPU0 CPU1
---- ----
mctp_flow_prepare_output(key, devA)
if (!key->dev) // sees NULL
mctp_flow_prepare_output(
key, devB)
if (!key->dev) // still NULL
mctp_dev_set_key(devB, key)
mctp_dev_hold(devB)
key->dev = devB
mctp_dev_set_key(devA, key)
mctp_dev_hold(devA)
key->dev = devA // overwrites devB

Now both devA and devB references were acquired, but only the final
key->dev value is tracked for release. One reference can be lost,
causing a resource leak as mctp_dev_release_key() would only decrease
the reference on one dev.

Fix by taking key->lock around the key->dev check and
mctp_dev_set_key() call.

公表日 2026年5月9日0:16
登録日 2026年5月9日4:15
最終更新日 2026年5月12日23:10
関連情報、対策とツール
共通脆弱性一覧