LinuxのLinux Kernelにおける競合状態に関する脆弱性
タイトル LinuxのLinux Kernelにおける競合状態に関する脆弱性
概要

Linuxカーネルにおいて、usb: gadget: u_etherのgether_disconnect()とeth_stop()間の競合状態の脆弱性が修正されました。gether_disconnect()がエンドポイントを解放している間にeth_stop()が同時に実行されると、eth_stop()は解放済みのエンドポイント記述子にアクセスし、NULLポインタの参照違反(NPE)が発生します。具体的には、カーネルでNULLポインタ参照不能エラーが発生し、以下のコールトレースが記録されます:__dwc3_gadget_ep_enable+0x60/0x788、dwc3_gadget_ep_enable+0x70/0xe4、usb_ep_enable+0x60/0x15c、eth_stop+0xb8/0x108。さらに、eth_stop()はdev-lockを保持したままクラッシュするため、gether_disconnect()を実行しているスレッドが同じロックを取得できず永久にスピンし続け、ハードロックアップが発生します。これに関するコアのハードロックアップのデバッグ情報とコールトレースは次のとおりです:queued_spin_lock_slowpath+0x94/0x488、_raw_spin_lock+0x64/0x6c、gether_disconnect+0x19c/0x1e8、ncm_set_alt+0x68/0x1a0、composite_setup+0x6a0/0xc50。原因はgether_disconnect()内でdev-port_usbのクリアが関数の最後まで遅延されていることにあります。このクリア処理をgether_disconnect()の先頭に移動し、dev-lockを保持したまま実行することで接続を即座に切断し、eth_stop()がdev-port_usbがNULLであることを認識して安全に処理を中止できるようになりました。

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

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

公表日 2026年5月1日0:00
登録日 2026年5月11日11:00
最終更新日 2026年5月11日11:00
CVSS3.0 : 警告
スコア 4.7
ベクター CVSS:3.0/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H
影響を受けるシステム
Linux
Linux Kernel 5.16 以上 6.1.169 未満
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
Linux Kernel 2.6.27 以上 5.10.253 未満
Linux Kernel 5.11 以上 5.15.203 未満
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
その他
変更履歴
No 変更内容 変更日
1 [2026年05月11日]
  掲載
2026年5月11日11:00

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

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

usb: gadget: u_ether: Fix race between gether_disconnect and eth_stop

A race condition between gether_disconnect() and eth_stop() leads to a
NULL pointer dereference. Specifically, if eth_stop() is triggered
concurrently while gether_disconnect() is tearing down the endpoints,
eth_stop() attempts to access the cleared endpoint descriptor, causing
the following NPE:

Unable to handle kernel NULL pointer dereference
Call trace:
__dwc3_gadget_ep_enable+0x60/0x788
dwc3_gadget_ep_enable+0x70/0xe4
usb_ep_enable+0x60/0x15c
eth_stop+0xb8/0x108

Because eth_stop() crashes while holding the dev->lock, the thread
running gether_disconnect() fails to acquire the same lock and spins
forever, resulting in a hardlockup:

Core - Debugging Information for Hardlockup core(7)
Call trace:
queued_spin_lock_slowpath+0x94/0x488
_raw_spin_lock+0x64/0x6c
gether_disconnect+0x19c/0x1e8
ncm_set_alt+0x68/0x1a0
composite_setup+0x6a0/0xc50

The root cause is that the clearing of dev->port_usb in
gether_disconnect() is delayed until the end of the function.

Move the clearing of dev->port_usb to the very beginning of
gether_disconnect() while holding dev->lock. This cuts off the link
immediately, ensuring eth_stop() will see dev->port_usb as NULL and
safely bail out.

公表日 2026年5月2日0:16
登録日 2026年5月2日4:07
最終更新日 2026年5月8日1:16
影響を受けるソフトウェアの構成
構成1 以上 以下 より上 未満
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 2.6.27 5.10.253
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.11 5.15.203
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 5.16 6.1.169
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:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc6:*:*:*:*:*:*
関連情報、対策とツール
共通脆弱性一覧