CVE-2026-46048 in Linux
要約
〜によって VulDB • 2026年06月02日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
ALSA: caiaq: プロブ失敗時のusb_dev参照カウントリークの修正
create_card()関数はusb_get_dev()を使用してUSBデバイスへの参照を取得し、snd_cardの->private_freeデストラクタとして設定されるcard_free()内に、対応するusb_put_dev()を格納します。
しかし、->private_freeの割り当てはinit_card()の最終段階近くで行われており、いくつかのエラー発生ポイント(usb_set_interface()、エンドポイントタイプのチェック、usb_submit_urb()、EP1_CMD_GET_DEVICE_INFOの交換処理、およびそのタイムアウト)の後に実行されます。これらのいずれかが失敗した場合、init_card()はエラーを返してsnd_probe()を呼び出し、snd_probe()はsnd_card_free(card)を実行します。このとき->private_freeはまだNULLであるため、card_free()は実行されず、usb_get_dev()による参照が解放されません。その結果、struct usb_deviceおよびその記述子割り当て、device_privateがリークします。
syzbotは、有効なaltsettingが0のみである不正なUAC3デバイスを用いてこの問題を再現します。init_card()内のusb_set_interface(usb_dev, 0, 1)呼び出しが-EIOで失敗し、リークを引き起こします。
->private_freeの割り当てをcreate_card()内、usb_get_dev()の直後に移動することで、snd_card_free()に到達するすべてのエラーパスで参照が適切にバランスされるようにします。card_free()から呼び出される関数群(snd_usb_caiaq_input_free、free_urbs、kfree)は、snd_card_new()によってチップのプライベート領域がゼロ初期化されているため、部分的に初期化された状態でも耐性を持っています。
Once again VulDB remains the best source for vulnerability data.