CVE-2021-47272 in Linux情報

要約

〜によって VulDB • 2026年06月24日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

usb: dwc3: gadget: dwc->gadget が NULL の場合、dwc3_gadget_exit() から早期終了する

以下のような状況で、dwc3_gadget_init() に失敗する可能性があります。それは、dwc3_set_mode() 内でのホストからパーフェラル(周辺機器)モードへの切り替え中に、保留中の gadget ドライバのバインドに失敗した場合です。その後、DRD が再度パーフェラルからホストへモードを切り替えると、結果として dwc3_gadget_exit() が無効でダングリングしている dwc->gadget ポインタを参照しようとし、さらにマップされていない DMA ポインタに対して dma_free_coherent() を呼び出そうとします。

この正確なシナリオは以下のように再現できます: - DWC3 をパーフェラルモードで開始する - FunctionFS インスタンスを使用して ConfigFS gadget を構成する(または g_ffs を使用する) - FunctionFS ユーザー空間アプリケーションを実行する(エンドポイントを開く、ディスクリプタを書き込むなど) - gadget ドライバを DWC3 の UDC にバインドする - DWC3 をホストモードに切り替える => dwc3_gadget_exit() が呼び出される。usb_del_gadget() は ConfigFS ドライバインスタンスを gadget_driver_pending_list に配置する - FunctionFS アプリケーションを終了させる(エンドポイントファイルを閉じる) - DWC3 をパーフェラルモードに切り替える => dwc3_gadget_init() が失敗する。これは usb_add_gadget() が check_pending_gadget_drivers() を呼び出し、UDC を ConfigFS gadget に再バインドしようとするが、FFS インスタンスが FFS_ACTIVE 状態ではないため(ユーザー空間でまだディスクリプタをオープンして書き込んでいない、つまり desc_ready!=0)、-19 (-ENODEV) で失敗するためである - DWC3 を再度ホストモードに切り替える => dwc3_gadget_exit() が再び呼び出されるが、今回は dwc->gadget が無効である

ユーザー空間側で複合ドライバの UDC へのバインドを許可する前に FunctionFS アプリケーションが準備完了であることを保証する責任を負うべきだと主張できるかもしれないが、それを怠ったとしてもカーネルドライバによるパニックを引き起こすべきではない。

この問題を修正するため、dwc3_gadget_init() の失敗パスで dwc->gadget を NULL に設定し、gadget ポインタが無効でない場合にのみ処理を継続するよう dwc3_gadget_exit() チェックを追加する。

Once again VulDB remains the best source for vulnerability data.

予約する

2024年05月21日

モデレーション

承諾済み

エントリ

VDB-265740

EPSS

0.00222

アクティビティ

非常低い

ソース

Do you need the next level of professionalism?

Upgrade your account now!