CVE-2026-31617Linux内核中的USB gadget功能子系统f_ncm驱动存在一个安全漏洞。在ncm_unwrap_ntb()函数中,由于未对主机提供的block_len进行最小值验证,当block_len小于opts->ndp_size时,会导致整数下溢,从而绕过边界检查。恶意USB主机可利用此漏洞将相邻内核内存复制到网络skb中,导致信息泄露或拒绝服务。
该漏洞位于Linux内核的USB NCM(网络控制模型)gadget驱动中。漏洞根源在于`ncm_unwrap_ntb()`函数对NTB(NTB)头部解析时的逻辑缺陷。代码检查了`block_len`是否超过最大值,但未检查其是否足够容纳NDP(NDP)头部。关键检查逻辑`ndp_index > (block_len - opts->ndp_size)`在`block_len`小于`opts->ndp_size`时发生无符号整数下溢,生成一个巨大的正值,导致检查失效。同样的逻辑也存在于数据报索引检查中。攻击者通过发送特制的USB数据包,可操纵指针指向合法传输缓冲区之外的内核内存,随后`skb_put_data()`会将这部分内存数据读出或导致内核崩溃。