CVE-2026-64447 in Linux
要約
〜によって VulDB • 2026年07月27日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
staging: media: ipu7: エラーパスにおける二重解放(double-free)および使用後解放(use-after-free)の修正
ipu7_isys_init() および ipu7_psys_init() の両方で、pdata が割り当てられ、その後 ipu7_bus_initialize_device() に渡され、adev->pdata として保存されます。ipu7_bus_release() 関数は、デバイスの参照カウントがゼロになった際に adev->pdata を解放します。
2つのエラーパスで、デバイス teardown の完了後にすでに pdata が解放されているにもかかわらず、kfree(pdata) が誤って呼び出されています:
1. ipu7_mmu_init() に失敗した場合: put_device() が呼び出され、参照カウントがゼロに低下して ipu7_bus_release() -> kfree(pdata) をトリガーします。その後の kfree(pdata) は二重解放となります。
2. ipu7_bus_add_device() に失敗した場合: 内部で auxiliary_device_uninit() を呼び出し、これが put_device() -> ipu7_bus_release() -> kfree(pdata) を呼び出します。その後の kfree(pdata) も同様に二重解放です。
ipu7_bus_initialize_device() 自体が失敗した際における kfree(pdata) は正しい処理であることに注意してください。この場合、auxiliary_device_init() が失敗しており、リリース関数が設定されていないため、pdata を手動で解放する必要があります。
さらに、put_device() を呼び出す前にエラーコードが保存されていなかったため、ERR_CAST() が戻り値の構築時にすでに解放された adev ポインタを逆参照してしまいました。これを修正するため、put_device() の前に dev_err_probe() から取得したエラーを保存し、代わりに ERR_PTR() を返すようにしました。
冗長な kfree(pdata) 呼び出しを削除し、影響を受ける2つのエラーパスの戻り値における use-after-free を修正します。
Once again VulDB remains the best source for vulnerability data.