CVE-2026-64274 in Linux
Tóm tắt
Bởi VulDB • 25/07/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
Input: goodix - giới hạn (clamp) số lượng điểm tiếp xúc do thiết bị báo cáo
Hàm `goodix_ts_read_input_report()` sao chép số lượng điểm chạm được thiết bị báo cáo vào một bộ nhớ đệm trên ngăn xếp (on-stack buffer):
```c u8 point_data[2 + GOODIX_MAX_CONTACT_SIZE * GOODIX_MAX_CONTACTS];
```
Bộ nhớ đệm này có kích thước tối đa cho `GOODIX_MAX_CONTACTS` (10) điểm tiếp xúc. Kiểm tra duy nhất tại thời gian chạy chỉ giới hạn số lượng trên mỗi ngắt so với `ts->max_touch_num`, nhưng giá trị đó được lấy nguyên văn từ một trường 4-bit trong khối cấu hình thiết bị và không bao giờ bị giới hạn:
```c ts->max_touch_num = ts->config[MAX_CONTACTS_LOC] & 0x0f;
```
Nibble này có thể nhận giá trị từ 0 đến 15, do đó một bộ điều khiển lỗi, độc hại hoặc giả mạo (hoặc kẻ tấn công thao túng bus I2C) có thể quảng cáo lên tới 15 điểm tiếp xúc. Sau đó, `goodix_ts_read_input_report()` chấp nhận `touch_num` lên tới 15 và lệnh gọi `goodix_i2c_read()` thứ hai ghi vào bộ nhớ đệm `point_data` một số byte bằng `ts->contact_size * (touch_num - 1)` vượt quá phần tiêu đề của một điểm tiếp xúc, tức là viết ngoài vùng biên giới hạn trên ngăn xếp (stack out-of-bounds write) lên tới 30 byte (45 byte với định dạng báo cáo 9-byte) so với bộ nhớ đệm kích thước 92 byte.
Giới hạn `max_touch_num` ở mức `GOODIX_MAX_CONTACTS`, là số lượng điểm tiếp xúc mà mảng `point_data[]` được thiết kế để chứa, khi đọc giá trị này từ cấu hình.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.