CVE-2026-43149Linux内核中的fsl_ucc_hdlc驱动程序存在一个内存释放漏洞。问题出在uhdlc_init函数中,priv->rx_buffer和priv->tx_buffer被作为一个连续的缓冲区整体分配,但在uhdlc_memclean清理函数中,却错误地对这两个部分分别调用了dma_free_coherent进行释放。这种分配与释放的不匹配导致了双重释放问题,可能引发内核内存破坏、系统崩溃或潜在的权限提升风险。
该漏洞源于Linux内核驱动fsl_ucc_hdlc中DMA缓冲区管理逻辑的错误。在初始化阶段uhdlc_init中,代码使用dma_alloc_coherent一次性分配了一块较大的连续内存区域,分别将priv->rx_buffer指向该区域的起始位置,priv->tx_buffer指向该区域内的某个偏移位置。这意味着它们共享同一块物理内存页。然而,在清理阶段uhdlc_memclean中,代码错误地认为这两个缓冲区是独立分配的,分别对priv->rx_buffer和priv->tx_buffer调用了dma_free_coherent。第一次调用会正确释放整个内存块,但第二次调用时,内核会尝试释放一个已经释放的内存地址。这种“双重释放”操作会破坏内核的SLAB分配器元数据,导致内核内存管理混乱。攻击者需具备本地低权限账户即可触发该路径,通过特定的设备操作诱导驱动进入清理流程,从而造成系统内核崩溃(DoS)或在特定条件下尝试进行更复杂的内存破坏攻击。