net:stmmac:TSO:修复非分页 SKB 数据的不平衡 DMA 映射/取消映射(CVE-2024-53058)

admin 2024-11-20 15:50:35 Ali_nvd 来源:ZONE.CI 全球网 0 阅读模式
net:stmmac:TSO:修复非分页 SKB 数据的不平衡 DMA 映射/取消映射(CVE-2024-53058)

CVE编号

CVE-2024-53058

利用情况

暂无

补丁情况

N/A

披露时间

2024-11-20
漏洞描述
在Linux内核中,解决了以下漏洞:网络:stmmac:TSO:修复非分页SKB数据的不平衡DMA映射/反映射在一种情况下,非分页的SKB数据携带协议头并通过DMA在特定平台上传输,如果DMA AXI地址宽度配置为40位/48位,或者非分页数据的大小大于TSO_MAX_BUFF_SIZE且DMA AXI地址宽度配置为32位时,那么这个SKB需要至少两个DMA传输描述符来服务它。例如,从一块非分页数据中映射一个DMA缓冲区需要分配三个描述符:dma_desc[N + 0],dma_desc[N + 1],dma_desc[N + 2]。然后,将为stmmac_tx_clean()重用额外信息分配三个元素:tx_q->tx_skbuff_dma[N + 0],tx_q->tx_skbuff_dma[N + 1],tx_q->tx_skbuff_dma[N + 2]。现在我们关注的是tx_q->tx_skbuff_dma[entry].buf,这是DMA映射调用返回的DMA缓冲区地址。stmmac_tx_clean()仅在tx_q->tx_skbuff_dma[entry].buf是有效缓冲区地址时尝试解除DMA缓冲区的映射。预期的行为是保存此非分页数据的DMA缓冲区地址到tx_q->tx_skbuff_dma[entry].buf,应该是这样的:tx_q->tx_skbuff_dma[N + 0].buf = NULL;tx_q->tx_skbuff_dma[N + 1].buf = NULL;tx_q->tx_skbuff_dma[N + 2].buf = dma_map_single();然而,当前代码的行为却与此相反:tx_q->tx_skbuff_dma[N + 0].buf = dma_map_single();tx_q->tx_skbuff_dma[N + 1].buf = NULL;tx_q->tx_skbuff_dma[N + 2].buf = NULL;在stmmac_tx_clean()中,当DMA引擎关闭dma_desc[N + 0]时,显然tx_q->tx_skbuff_dma[N + 0].buf是一个有效的缓冲区地址,那么DMA缓冲区会立即被解除映射。可能存在一种罕见情况,即DMA引擎尚未完成处理dma_desc[N + 1],dma_desc[N + 2],此时事情会变得很糟糕。DMA将访问未映射/未引用的内存区域,可能会导致数据传输损坏或触发IOMMU错误。相比之下,处理SKB片段的循环表现得很好,实际上驱动应该同时对非分页数据和分页片段进行这样的操作。此补丁通过修复分配DMA缓冲区地址时的数组索引来纠正DMA映射/反映射序列。已在DWXGMAC CORE 3.20a上进行了测试和验证。
解决建议
建议您更新当前系统或软件至最新版,完成漏洞的修复。
参考链接
https://git.kernel.org/stable/c/07c9c26e37542486e34d767505e842f48f29c3f6
https://git.kernel.org/stable/c/58d23d835eb498336716cca55b5714191a309286
https://git.kernel.org/stable/c/66600fac7a984dea4ae095411f644770b2561ede
https://git.kernel.org/stable/c/a3ff23f7c3f0e13f718900803e090fd3997d6bc9
https://git.kernel.org/stable/c/ece593fc9c00741b682869d3f3dc584d37b7c9df
CVSS3评分 N/A
  • 攻击路径 N/A
  • 攻击复杂度 N/A
  • 权限要求 N/A
  • 影响范围 N/A
  • 用户交互 N/A
  • 可用性 N/A
  • 保密性 N/A
  • 完整性 N/A
N/A
CWE-ID 漏洞类型
- avd.aliyun.com
weinxin
版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!
评论:0   参与:  0