CVE-2026-31660Linux内核中的NFC pn533驱动存在空指针解引用漏洞。在pn532_receive_buf()函数处理接收数据时,代码逻辑存在缺陷,即在消耗字节之后才分配新的接收缓冲区。如果内存分配失败,尽管已经消耗了字节,回调函数仍返回0,这不仅违反了receive_buf()的统计约定,还导致recv_skb指针为NULL。在下一次接收回调时,skb_put_u8()操作该空指针将引发系统崩溃,导致拒绝服务。
该漏洞源于Linux内核drivers/nfc/pn533/目录下的驱动代码。漏洞触发点在于pn532_receive_buf()函数的数据处理流程。当Serdev层传递数据给驱动时,驱动需要将数据填入recv_skb。原代码先处理数据包,再尝试为新包分配缓冲区。若系统内存紧张导致alloc_skb()失败,函数返回0(通知上层未处理数据),但内部状态已改变,且recv_skb被置空。当后续数据到达时,驱动试图向recv_skb写入数据(通过skb_put_u8),直接访问NULL地址,触发内核异常。由于CVSS向量为AV:L/PR:L,攻击者需要本地低权限账户,并结合特定的NFC硬件交互或内存耗尽条件来利用此漏洞导致系统崩溃。