• 公告ID (KylinSec-SA-2025-2363)

摘要:

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

acpi: typec: ucsi: Introduce a ->poll_cci method

For the ACPI backend of UCSI the UCSI "registers" are just a memory copy
of the register values in an opregion. The ACPI implementation in the
BIOS ensures that the opregion contents are synced to the embedded
controller and it ensures that the registers (in particular CCI) are
synced back to the opregion on notifications. While there is an ACPI call
that syncs the actual registers to the opregion there is rarely a need to
do this and on some ACPI implementations it actually breaks in various
interesting ways.

The only reason to force a sync from the embedded controller is to poll
CCI while notifications are disabled. Only the ucsi core knows if this
is the case and guessing based on the current command is suboptimal, i.e.
leading to the following spurious assertion splat:

WARNING: CPU: 3 PID: 76 at drivers/usb/typec/ucsi/ucsi.c:1388 ucsi_reset_ppm+0x1b4/0x1c0 [typec_ucsi]
CPU: 3 UID: 0 PID: 76 Comm: kworker/3:0 Not tainted 6.12.11-200.fc41.x86_64 #1
Hardware name: LENOVO 21D0/LNVNB161216, BIOS J6CN45WW 03/17/2023
Workqueue: events_long ucsi_init_work [typec_ucsi]
RIP: 0010:ucsi_reset_ppm+0x1b4/0x1c0 [typec_ucsi]
Call Trace:
<TASK&gt;
ucsi_init_work+0x3c/0xac0 [typec_ucsi]
process_one_work+0x179/0x330
worker_thread+0x252/0x390
kthread+0xd2/0x100
ret_from_fork+0x34/0x50
ret_from_fork_asm+0x1a/0x30
</TASK&gt;

Thus introduce a -&gt;poll_cci() method that works like -&gt;read_cci() with an
additional forced sync and document that this should be used when polling
with notifications disabled. For all other backends that presumably don't
have this issue use the same implementation for both methods.

安全等级: Low

公告ID: KylinSec-SA-2025-2363

发布日期: 2025年4月20日

关联CVE: CVE-2025-21902  

  • 详细介绍

1. 漏洞描述

   

在Linux内核中,以下漏洞已被修复:

acpi: typec: ucsi: 引入->poll_cci方法

对于UCSI的ACPI后端,UCSI"寄存器"只是操作区域(opregion)中寄存器值的内存副本。BIOS中的ACPI实现确保操作区域内容同步到嵌入式控制器,并确保寄存器(特别是CCI)在通知时同步回操作区域。虽然有一个ACPI调用可以将实际寄存器同步到操作区域,但很少需要这样做,而且在某些ACPI实现上实际上会以各种有趣的方式出错。

强制从嵌入式控制器同步的唯一原因是在禁用通知时轮询CCI。只有ucsi核心知道是否是这种情况,基于当前命令进行猜测是次优的,即会导致以下虚假断言警告:

WARNING: CPU: 3 PID: 76 at drivers/usb/typec/ucsi/ucsi.c:1388 ucsi_reset_ppm+0x1b4/0x1c0 [typec_ucsi]
CPU: 3 UID: 0 PID: 76 Comm: kworker/3:0 Not tainted 6.12.11-200.fc41.x86_64 #1
Hardware name: LENOVO 21D0/LNVNB161216, BIOS J6CN45WW 03/17/2023
Workqueue: events_long ucsi_init_work [typec_ucsi]
RIP: 0010:ucsi_reset_ppm+0x1b4/0x1c0 [typec_ucsi]
Call Trace:
<TASK>
ucsi_init_work+0x3c/0xac0 [typec_ucsi]
process_one_work+0x179/0x330
worker_thread+0x252/0x390
kthread+0xd2/0x100
ret_from_fork+0x34/0x50
ret_from_fork_asm+0x1a/0x30
</TASK>

因此引入一个->poll_cci()方法,其工作方式类似于->read_cci(),但带有强制同步,并文档说明当在禁用通知的情况下轮询时应使用此方法。对于所有其他可能没有此问题的后端,对两种方法使用相同的实现。

2. 影响范围

cve名称 产品 组件 是否受影响
CVE-2025-21902 KY3.4-5 kernel Unaffected
CVE-2025-21902 V6 kernel Unaffected

3. 影响组件

    无

4. 修复版本

    无

5. 修复方法

   无

6. 下载链接

    无
上一篇:KylinSec-SA-2025-2362 下一篇:KylinSec-SA-2025-2364