製品・ソフトウェアに関する情報
LinuxのLinux Kernelにおける解放済みメモリの使用に関する脆弱性
Title LinuxのLinux Kernelにおける解放済みメモリの使用に関する脆弱性
Summary

Linuxカーネルにおいて、以下の脆弱性が修正されました。media: as102: as102_usb_probe()内でデバイス登録後にメモリを解放しないように修正されました。as102_usbドライバでは以下の競合状態が発生します。CPU0ではas102_usb_probe()内でkzalloc()によりas102_dev_tを割り当て、usb_register_dev()を呼び出します。一方、CPU1ではsys_open("/path/to/dev")でas102のファイルディスクリプタを開き、その後usb_deregister_dev()とkfree()でas102_dev_tを解放します。sys_close(fd)呼び出し時にはas102_release() → as102_usb_release() → kfree()が発生し、use-after-freeおよびdouble-freeの脆弱性が生じます。usb_register_dev()で登録されたUSBキャラクタデバイスがusb_deregister_dev()や切断によって登録解除されると、デバイスノードは削除されて新しいopen()は失敗しますが、既に開いているファイルディスクリプタは最後の参照が外れるまで有効です。また、ドライバの.release()が呼ばれるまで保持されます。as102_usb_probe()はエラーパスでusb_deregister_dev()後に即座にas102_dev_tを解放してしまうため、ユーザ空間での競合により解放済みメモリへのアクセスが発生し、脆弱性が生まれます。この問題の修正はusb_register_dev()成功後に直接kfree(as102_dev_t)をしないことであり、登録解除後のメモリ解放は.release()に遅延させます。つまり、最後のopenファイルディスクリプタが閉じられた時点で.release()が最終的にkfreeを行うようにしています。

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

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

Publication Date April 24, 2026, midnight
Registration Date April 30, 2026, 12:34 p.m.
Last Update April 30, 2026, 12:34 p.m.
CVSS3.0 : 重要
Score 7.8
Vector CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Affected System
Linux
Linux Kernel 6.13 以上 6.18.24 未満
Linux Kernel 6.19 以上 6.19.14 未満
Linux Kernel 6.6.136 未満
Linux Kernel 6.7 以上 6.12.83 未満
Linux Kernel 7.0 以上 7.0.1 未満
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
その他
Change Log
No Changed Details Date of change
1 [2026年04月30日]
  掲載
April 30, 2026, 12:34 p.m.

NVD Vulnerability Information
CVE-2026-31578
Summary

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

media: as102: fix to not free memory after the device is registered in as102_usb_probe()

In as102_usb driver, the following race condition occurs:
```
CPU0 CPU1
as102_usb_probe()
kzalloc(); // alloc as102_dev_t
....
usb_register_dev();
fd = sys_open("/path/to/dev"); // open as102 fd
....
usb_deregister_dev();
....
kfree(); // free as102_dev_t
....
sys_close(fd);
as102_release() // UAF!!
as102_usb_release()
kfree(); // DFB!!
```

When a USB character device registered with usb_register_dev() is later
unregistered (via usb_deregister_dev() or disconnect), the device node is
removed so new open() calls fail. However, file descriptors that are
already open do not go away immediately: they remain valid until the last
reference is dropped and the driver's .release() is invoked.

In as102, as102_usb_probe() calls usb_register_dev() and then, on an
error path, does usb_deregister_dev() and frees as102_dev_t right away.
If userspace raced a successful open() before the deregistration, that
open FD will later hit as102_release() --> as102_usb_release() and access
or free as102_dev_t again, occur a race to use-after-free and
double-free vuln.

The fix is to never kfree(as102_dev_t) directly once usb_register_dev()
has succeeded. After deregistration, defer freeing memory to .release().

In other words, let release() perform the last kfree when the final open
FD is closed.

Publication Date April 25, 2026, 12:16 a.m.
Registration Date April 25, 2026, 4:07 a.m.
Last Update April 27, 2026, 11:16 p.m.
Related information, measures and tools
Common Vulnerabilities List