LinuxのLinux Kernelにおける有効なライフタイム後のリソースの解放の欠如に関する脆弱性
タイトル LinuxのLinux Kernelにおける有効なライフタイム後のリソースの解放の欠如に関する脆弱性
概要

Linuxカーネルにおいて、以下の脆弱性が修正されました。scsi: target: tcm_loop: target_resetハンドラーでのコマンド排出問題です。tcm_loop_target_reset()はSCSI EHの契約に違反しており、実際にはコマンドを排出せずにSUCCESSを返しています。SCSI EHのドキュメント(scsi_eh.rst)によると、リセットハンドラーがSUCCESSを返す場合、ドライバーは下位層の「タイムアウトしたscmdを忘れておらず」、新しいコマンドの準備ができている必要があると規定されています。他のすべてのSCSI LLD(virtio_scsi、mpt3sas、ipr、scsi_debug、mpi3mr)は、SUCCESSを返す前に保留中のコマンドを排出または完了させることでこれを保証しています。tcm_loop_target_reset()がコマンドを排出しないため、SCSI EHはターゲットコアがまだ古いse_cmdの非同期完了作業を保持している間に回復コマンド(例:TUR)に対してin-flightのscsi_cmnd構造を再利用してしまいます。queuecommand内のmemsetがse_lunとlun_ref_activeをゼロクリアし、transport_lun_remove_cmd()がpercpu_ref_put()の呼び出しをスキップします。このリークしたLUN参照によりtransport_clear_lun_ref()が完了せず、configfsのLUN解除はD状態で永久にハングします。INFO: task rm:264 が122秒以上ブロックされています。rm D 0 264 258 0x00004000 Call Trace: __schedule+0x3d0/0x8e0、schedule+0x36/0xf0、transport_clear_lun_ref+0x78/0x90 [target_core_mod]、core_tpg_remove_lun+0x28/0xb0 [target_core_mod]、target_fabric_port_unlink+0x50/0x60 [target_core_mod]、configfs_unlink+0x156/0x1f0 [configfs]、vfs_unlink+0x109/0x290、do_unlinkat+0x1d5/0x2d0。修正内容は、tcm_loop_target_reset()で実際にコマンドを排出することです。1. tcm_loop_issue_tmr()を介してTMR_LUN_RESETを発行し、ターゲットコアが知っているすべてのコマンド(まだCMD_T_COMPLETEでないもの)を排出します。2. blk_mq_tagset_busy_iter()を用いて開始されたすべてのリクエストを反復処理し、各se_cmdに対してflush_work()を行います。これはTMRの前にすでにCMD_T_COMPLETEがセットされていたコマンドの保留中完了作業を排出するためのものであり(TMRは__target_check_io_state()でこれらをスキップします)、mpi3mr、scsi_debug、libsasがリセット時に未完了コマンドを排出するために使用しているパターンと同様です。

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

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

公表日 2026年5月1日0:00
登録日 2026年5月11日10:56
最終更新日 2026年5月11日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 5.13 以上 5.15.203 未満
Linux Kernel 5.16 以上 6.1.168 未満
Linux Kernel 6.13 以上 6.18.22 未満
Linux Kernel 6.19 以上 6.19.12 未満
Linux Kernel 6.2 以上 6.6.134 未満
Linux Kernel 6.7 以上 6.12.81 未満
Linux Kernel 7.0
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
その他
変更履歴
No 変更内容 変更日
1 [2026年05月11日]
  掲載
2026年5月11日10:56

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

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

scsi: target: tcm_loop: Drain commands in target_reset handler

tcm_loop_target_reset() violates the SCSI EH contract: it returns SUCCESS
without draining any in-flight commands. The SCSI EH documentation
(scsi_eh.rst) requires that when a reset handler returns SUCCESS the driver
has made lower layers "forget about timed out scmds" and is ready for new
commands. Every other SCSI LLD (virtio_scsi, mpt3sas, ipr, scsi_debug,
mpi3mr) enforces this by draining or completing outstanding commands before
returning SUCCESS.

Because tcm_loop_target_reset() doesn't drain, the SCSI EH reuses in-flight
scsi_cmnd structures for recovery commands (e.g. TUR) while the target core
still has async completion work queued for the old se_cmd. The memset in
queuecommand zeroes se_lun and lun_ref_active, causing
transport_lun_remove_cmd() to skip its percpu_ref_put(). The leaked LUN
reference prevents transport_clear_lun_ref() from completing, hanging
configfs LUN unlink forever in D-state:

INFO: task rm:264 blocked for more than 122 seconds.
rm D 0 264 258 0x00004000
Call Trace:
__schedule+0x3d0/0x8e0
schedule+0x36/0xf0
transport_clear_lun_ref+0x78/0x90 [target_core_mod]
core_tpg_remove_lun+0x28/0xb0 [target_core_mod]
target_fabric_port_unlink+0x50/0x60 [target_core_mod]
configfs_unlink+0x156/0x1f0 [configfs]
vfs_unlink+0x109/0x290
do_unlinkat+0x1d5/0x2d0

Fix this by making tcm_loop_target_reset() actually drain commands:

1. Issue TMR_LUN_RESET via tcm_loop_issue_tmr() to drain all commands that
the target core knows about (those not yet CMD_T_COMPLETE).

2. Use blk_mq_tagset_busy_iter() to iterate all started requests and
flush_work() on each se_cmd — this drains any deferred completion work
for commands that already had CMD_T_COMPLETE set before the TMR (which
the TMR skips via __target_check_io_state()). This is the same pattern
used by mpi3mr, scsi_debug, and libsas to drain outstanding commands
during reset.

公表日 2026年5月2日0:16
登録日 2026年5月2日4:07
最終更新日 2026年5月8日3:28
影響を受けるソフトウェアの構成
構成1 以上 以下 より上 未満
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.13 5.15.203
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.16 6.1.168
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.2 6.6.134
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.7 6.12.81
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.13 6.18.22
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.19 6.19.12
cpe:2.3:o:linux:linux_kernel:7.0:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc4:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc5:*:*:*:*:*:*
関連情報、対策とツール
共通脆弱性一覧