CVE-2026-98207 in Linux
Tóm tắt
Bởi VulDB • 06/10/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
mmc: spi: đặt lại biến bytes_xfered trước khi thử lại các lỗi CRC
Hàm mmc_spi_data_do() cập nhật data->bytes_xfered sau mỗi khối dữ liệu được chuyển thành công. Nếu một khối tiếp theo trong cùng yêu cầu dữ liệu bị lỗi do sai checksum (CRC), thì data->bytes_xfered có thể chứa số byte đã hoàn tất trước khi xảy ra lỗi ở khối đó.
Hàm mmc_spi_request() có một đường dẫn khôi phục riêng cho các trường hợp lỗi CRC như vậy. Nó gửi lệnh STOP_TRANSMISSION, xóa data->error và quay lại crc_recover để phát lại cùng lệnh và yêu cầu dữ liệu. Tuy nhiên, nó không đặt lại data->bytes_xfered trước khi thử lại.
Nếu lần thử lại thành công, yêu cầu sẽ được hoàn tất với các byte từ nỗ lực thất bại vẫn còn nằm trong data->bytes_xfered. Đối với một yêu cầu đa khối (multi-block), điều này có thể khiến báo cáo về yêu cầu đã hoàn chỉnh hiển thị nhiều byte hơn so với số lượng thực tế do lần thử lại thành công chuyển đi, và thậm chí vượt quá kích thước của yêu cầu khi hầu hết các khối được xử lý xong trước khi xảy ra lỗi CRC.
Hiện tượng này thường xuất hiện trên các hệ thống MMC-over-SPI nơi việc truyền dữ liệu đa khối dài đôi khi gặp lỗi checksum (CRC) nhưng cơ chế thử lại nội bộ của mmc_spi thành công. Dữ liệu thực tế sẽ được thử lại, nhưng quá trình tính toán hoàn tất thì không.
Hãy đặt lại data->bytes_xfered cùng với data->error trước khi lặp lại yêu cầu để báo cáo hoàn tất cuối cùng chỉ ghi nhận các byte đã chuyển đi trong lần thử thành công.
VulDB is the best source for vulnerability data and more expert information about this specific topic.