LinuxのLinux Kernelにおける境界外書き込みに関する脆弱性
タイトル LinuxのLinux Kernelにおける境界外書き込みに関する脆弱性
概要

Linuxカーネルにおいて、以下の脆弱性が修正されました:usb: chipidea: udc: _ep_nuke()内のDMAおよびSGクリーンアップの修正です。ChipIdea UDCドライバは、アクティブな転送中に切断されたUSBデバイスが再接続された際に「ページアラインされていないsgバッファ」エラーが発生する可能性があります。これは_ep_nuke()がDMAバッファのマッピング解除やscatter-gatherバウンスバッファのクリーンアップを適切に行わずにリクエストをガジェットレイヤに返すために起こります。根本原因は、マルチセグメントDMA転送中に切断が発生すると、リクエストのnum_mapped_sgsフィールドおよびsgt.sglポインタが古い値のまま残ることです。リクエストは-ESHUTDOWN状態でガジェットドライバへ返されますが、DMA状態は依然としてアクティブな状態です。もしガジェットドライバが再初期化せずに接続再開時にこのリクエストを再利用すると、古いDMA状態により_hardware_enqueue()はDMAマッピングをスキップし(num_mapped_sgsが0でないため)、解放済みまたは無効なDMAアドレスを使用しようとしてアラインメントエラーやメモリ破壊が生じる可能性があります。正常な完了パスである_hardware_dequeue()は、リクエストを返す前にusb_gadget_unmap_request_by_dev()およびsglist_do_debounce()を適切に呼び出します。_ep_nuke()パスも同様のクリーンアップを行い、リクエストをクリーンで再利用可能な状態で返す必要があります。修正内容としては、_ep_nuke()にDMAマッピング解除およびバウンスバッファのクリーンアップを追加し、_hardware_dequeue()のクリーンアップシーケンスを反映しました。具体的には、num_mapped_sgsが設定されている場合はusb_gadget_unmap_request_by_dev()を呼び出し、バウンスバッファが存在する場合はcopy=falseでsglist_do_debounce()を呼び出します。これにより、エンドポイントシャットダウンによりリクエストが返される際に古いDMAマッピングが残らないことが保証されます。また、sglist_do_debounce()へのfalseパラメータは、転送が中断されたシャットダウンパスに適したデータコピーを防ぐ役割を果たします。

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

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

公表日 2026年5月6日0:00
登録日 2026年5月14日10:16
最終更新日 2026年5月14日10:16
CVSS3.0 : 重要
スコア 7.8
ベクター CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
影響を受けるシステム
Linux
Linux Kernel 2.6.29 以上 6.12.75 未満
Linux Kernel 6.13 以上 6.18.16 未満
Linux Kernel 6.19 以上 6.19.6 未満
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
その他
変更履歴
No 変更内容 変更日
1 [2026年05月14日]
  掲載
2026年5月14日10:16

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

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

usb: chipidea: udc: fix DMA and SG cleanup in _ep_nuke()

The ChipIdea UDC driver can encounter "not page aligned sg buffer"
errors when a USB device is reconnected after being disconnected
during an active transfer. This occurs because _ep_nuke() returns
requests to the gadget layer without properly unmapping DMA buffers
or cleaning up scatter-gather bounce buffers.

Root cause:
When a disconnect happens during a multi-segment DMA transfer, the
request's num_mapped_sgs field and sgt.sgl pointer remain set with
stale values. The request is returned to the gadget driver with status
-ESHUTDOWN but still has active DMA state. If the gadget driver reuses
this request on reconnect without reinitializing it, the stale DMA
state causes _hardware_enqueue() to skip DMA mapping (seeing non-zero
num_mapped_sgs) and attempt to use freed/invalid DMA addresses,
leading to alignment errors and potential memory corruption.

The normal completion path via _hardware_dequeue() properly calls
usb_gadget_unmap_request_by_dev() and sglist_do_debounce() before
returning the request. The _ep_nuke() path must do the same cleanup
to ensure requests are returned in a clean, reusable state.

Fix:
Add DMA unmapping and bounce buffer cleanup to _ep_nuke() to mirror
the cleanup sequence in _hardware_dequeue():
- Call usb_gadget_unmap_request_by_dev() if num_mapped_sgs is set
- Call sglist_do_debounce() with copy=false if bounce buffer exists

This ensures that when requests are returned due to endpoint shutdown,
they don't retain stale DMA mappings. The 'false' parameter to
sglist_do_debounce() prevents copying data back (appropriate for
shutdown path where transfer was aborted).

公表日 2026年5月6日21:16
登録日 2026年5月7日4:09
最終更新日 2026年5月13日3:51
影響を受けるソフトウェアの構成
構成1 以上 以下 より上 未満
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 2.6.29 6.12.75
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.13 6.18.16
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.19 6.19.6
関連情報、対策とツール
共通脆弱性一覧