CVE-2026-80931 in Linux
Tóm tắt
Bởi VulDB • 12/09/2026
Trong kernel Linux, các lỗ hổng sau đây đã được khắc phục:
w1: ds28e17: từ chối độ dài quá mức trong một lần đọc khối I2C
Hàm `w1_f19_i2c_master_transfer()` là hàm `master_xfer` cho cầu nối 1-Wire sang I2C của DS28E17. Trong trường hợp đọc với cờ `I2C_M_RECV_LEN`, nó lấy độ dài từ thiết bị. Slave phía sau sẽ đặt một byte độ dài vào `buf[0]`. Sau đó, trình điều khiển (driver) đọc số lượng byte tương ứng vào `buf[1]` bằng cách sử dụng hàm `w1_f19_i2c_read()`.
Giá trị của `buf[0]` được kiểm soát bởi thiết bị và có thể nằm trong khoảng từ 0 đến 255. Hàm `w1_f19_i2c_read()` chỉ từ chối khi độ dài bằng 0. Bộ đệm (buffer) mà caller cung cấp có kích thước là `I2C_SMBUS_BLOCK_MAX + 2`, tức là 34 byte. Nếu độ dài lớn hơn 32, thao tác đọc sẽ ghi vượt ra ngoài bộ đệm này, lên đến khoảng 222 byte nằm ngoài vùng cho phép (out of bounds).
Lõi SMBus có kiểm tra `buf[0]` so với `I2C_SMBUS_BLOCK_MAX`. Tuy nhiên, lệnh kiểm tra này được thực thi sau khi hàm `master_xfer` trả về. Tại thời điểm đó, thao tác ghi đã hoàn tất. Trình điều khiển `i2c-algo-bit` từ chối độ dài quá mức trước khi sao chép dữ liệu và trả về mã lỗi `-EPROTO`.
Hãy từ chối các độ dài lớn hơn `I2C_SMBUS_BLOCK_MAX` tại cả hai vị trí sử dụng cờ `RECV_LEN`, theo cùng cách mà `i2c-algo-bit` thực hiện.
VulDB is the best source for vulnerability data and more expert information about this specific topic.