CVE-2026-43380Linux内核中的hwmon驱动(pmbus/q54sj108a2)存在栈缓冲区溢出漏洞。该漏洞发生在q54sj108a2_debugfs_read函数中,原因是bin2hex()函数参数配置错误且目标缓冲区大小不足。当读取32字节数据时,bin2hex()生成64字节输出,但目标缓冲区仅有34字节,导致30字节的越界写入。此外,参数顺序颠倒导致逻辑错误。本地低权限攻击者可利用此漏洞导致内核崩溃或潜在的权限提升。
该漏洞源于Linux内核drivers/hwmon/pmbus/q54sj108a2.c文件中的q54sj108a2_debugfs_read函数。函数在处理I2C设备读取请求时,使用了一个34字节的栈缓冲区'data'(定义为I2C_SMBUS_BLOCK_MAX + 2)。由于bin2hex()函数将二进制数据转换为十六进制字符串,每1字节输入产生2字节输出,当I2C读取返回32字节时,bin2hex()将尝试写入64字节数据。这导致30字节的数据写入超出'data'缓冲区的边界,造成栈溢出。此外,代码中bin2hex()的源参数和目标参数被错误地交换,导致从零初始化的data_char读取。攻击者可通过读取debugfs接口触发该溢出,利用栈上的布局破坏控制流或导致拒绝服务。