CVE-2025-71108CVE-2025-71108是Linux内核中USB Type-C Connector System Interface (UCSI)驱动的安全漏洞。该漏洞源于UCSI规范中num_connectors字段的定义与某些固件实现不一致。根据UCSI规范,num_connectors字段应为7位,第8位为保留位应设为0。然而,部分有缺陷的固件(如Lenovo P1 G8设备上的固件)错误地设置了这个保留位,导致内核在解析该字段时出现异常,进而造成系统无法正常启动。这是一个典型的固件兼容性问题,影响范围主要集中在使用问题固件的Lenovo设备上。漏洞的严重性在于其导致的可用性影响(系统无法启动),而非传统意义上的代码执行或数据泄露。内核社区已通过补丁添加了错误检测和自动修正机制,在检测到固件不正确行为时自动修正num_connectors值,确保系统能够正常启动。
漏洞位于Linux内核的drivers/usb/typec/ucsi目录下的UCSI驱动代码中。UCSI是USB-IF定义的USB Type-C接口标准,用于管理USB Type-C连接器的配置和功能。UCSI规范明确定义num_connectors字段为7位宽度(范围0-127),用于表示支持的连接器数量,第8位为保留位必须为0。在问题固件中,这个保留位被错误地设置为1,导致内核读取到的num_connectors值超出了预期范围。当内核尝试根据这个错误的连接器数量分配资源或遍历连接器列表时,会触发各种异常情况,最严重的是导致系统启动过程卡死或崩溃。具体的技术问题表现为:内核在解析ACPI或设备固件提供的UCSI数据结构时,直接读取8位的num_connectors字段而未进行位掩码处理。当第8位被设置时,实际读取到的值会大于127,内核可能尝试分配过大的内存或创建超出预期的连接器对象,最终导致资源分配失败或内存访问越界。修复方案是在读取num_connectors字段后立即应用0x7F位掩码,确保只使用有效的7位数据,并在检测到保留位被设置时记录警告信息。