CVE-2022-50541CVE-2022-50541是Linux内核中dmaengine子系统的TI K3 UDMA驱动存在的一个整数溢出漏洞。该漏洞位于UDMA_CHAN_RT_*BCNT_REG实时通道字节计数器中,这些寄存器是32位硬件计数器,用于监控通道的操作进度状态。当通过DMA通道传输超过4GB的数据时,这些32位计数器会发生溢出,导致操作完成计算受到影响,从而使传输无限期挂起。该漏洞需要本地低权限访问即可触发,无需用户交互,主要影响系统的可用性,可能导致系统挂起或DMA传输无法正常完成。此漏洞已在2025年10月7日公开披露,影响多个Linux内核稳定版本。TI K3系列SoC(如AM64x、AM65x、J721E等)广泛用于工业控制、嵌入式系统和网络设备中,该漏洞可能对这些设备的稳定运行造成影响。
该漏洞的根本原因在于UDMA_CHAN_RT_*BCNT_REG寄存器是32位硬件计数器,最大可表示值为4294967295(4GB-1)。当DMA传输的数据量超过4GB时,这些计数器会从最大值回绕到0,导致溢出。驱动程序使用这些计数器来监控通道的操作进度状态,并在每次事务完成时计算剩余的传输量。当计数器溢出后,完成计算逻辑会得到错误的结果,导致驱动程序认为传输尚未完成,从而使传输无限期挂起。
漏洞利用方式:
1. 攻击者需要具有本地低权限访问权限(PR:L)
2. 通过操作支持DMA的设备(如网络设备、存储设备等)发起超过4GB的大数据传输
3. 当传输进行到计数器溢出点时,驱动程序无法正确处理溢出
4. 传输挂起,导致系统资源无法释放,可能引发系统不稳定或拒绝服务
修复方案是在每次完整事务完成时减少字节计数,确保RT计数器永远不会溢出,同时移除驱动侧uc->bcnt的维护(因为RT计数器现在维护当前事务的统计数据)。