製品・ソフトウェアに関する情報
PCIデバイスのランタイムパワーマネジメント処理における競合状態が原因でカーネルがクラッシュする可能性がある脆弱性
Title PCIデバイスのランタイムパワーマネジメント処理における競合状態が原因でカーネルがクラッシュする可能性がある脆弱性
Summary

LinuxカーネルのPCIデバイスにおけるランタイムPM処理で、.runtime_idle()コールバックとドライバ削除が競合し、カーネルがクラッシュする場合がありました。この問題は、pm_runtime_get_sync()呼び出しの後にpm_runtime_barrier()を実行することで、.runtime_idle()の同時実行を防止して解決されました。今後は、ドライバ削除前にpm_runtime_get_sync()とpm_runtime_barrier()を連続して呼び出すことで、競合状態を防止できます。

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

正式な対策が公開されています。ベンダ情報を参照して適切な対策を実施してください。

Publication Date May 17, 2024, midnight
Registration Date Dec. 25, 2025, 5:01 p.m.
Last Update Dec. 25, 2025, 5:01 p.m.
CVSS3.0 : 警告
Score 4.7
Vector CVSS:3.0/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H
Affected System
Debian
Debian GNU/Linux 10.0
Linux
Linux Kernel 4.19.312 未満
Linux Kernel 4.20 から 5.4.274 未満
Linux Kernel 5.11 から 5.15.154 未満
Linux Kernel 5.16 から 6.1.84 未満
Linux Kernel 5.5 から 5.10.215 未満
Linux Kernel 6.2 から 6.6.24 未満
Linux Kernel 6.7 から 6.7.12 未満
Linux Kernel 6.8 から 6.8.3 未満
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
ベンダー情報
その他
Change Log
No Changed Details Date of change
1 [2025年12月25日]
  掲載
Dec. 25, 2025, 5:01 p.m.

NVD Vulnerability Information
CVE-2024-35809
Summary

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

PCI/PM: Drain runtime-idle callbacks before driver removal

A race condition between the .runtime_idle() callback and the .remove()
callback in the rtsx_pcr PCI driver leads to a kernel crash due to an
unhandled page fault [1].

The problem is that rtsx_pci_runtime_idle() is not expected to be running
after pm_runtime_get_sync() has been called, but the latter doesn't really
guarantee that. It only guarantees that the suspend and resume callbacks
will not be running when it returns.

However, if a .runtime_idle() callback is already running when
pm_runtime_get_sync() is called, the latter will notice that the runtime PM
status of the device is RPM_ACTIVE and it will return right away without
waiting for the former to complete. In fact, it cannot wait for
.runtime_idle() to complete because it may be called from that callback (it
arguably does not make much sense to do that, but it is not strictly
prohibited).

Thus in general, whoever is providing a .runtime_idle() callback needs
to protect it from running in parallel with whatever code runs after
pm_runtime_get_sync(). [Note that .runtime_idle() will not start after
pm_runtime_get_sync() has returned, but it may continue running then if it
has started earlier.]

One way to address that race condition is to call pm_runtime_barrier()
after pm_runtime_get_sync() (not before it, because a nonzero value of the
runtime PM usage counter is necessary to prevent runtime PM callbacks from
being invoked) to wait for the .runtime_idle() callback to complete should
it be running at that point. A suitable place for doing that is in
pci_device_remove() which calls pm_runtime_get_sync() before removing the
driver, so it may as well call pm_runtime_barrier() subsequently, which
will prevent the race in question from occurring, not just in the rtsx_pcr
driver, but in any PCI drivers providing .runtime_idle() callbacks.

Publication Date May 17, 2024, 11:15 p.m.
Registration Date May 18, 2024, 10:01 a.m.
Last Update Nov. 21, 2024, 6:20 p.m.
Related information, measures and tools
Common Vulnerabilities List