🇰🇷 한글 설명
Linux 커널의 MMC-over-SPI 드라이버에서 CRC 오류 발생 시 재시도 과정 중 전송된 바이트 수(bytes_xfered)를 초기화하지 않는 취약점이 발견되었습니다. 이로 인해 재시도가 성공하더라도 실제 전송된 양보다 더 많은 데이터가 전송된 것으로 잘못 보고될 수 있습니다.
💡 쉬운 설명
데이터를 전송하다가 오류가 나서 다시 시도할 때, 이전에 실패했던 기록을 지우지 않아 실제보다 데이터가 더 많이 전송된 것처럼 계산되는 오류입니다. 이는 데이터 전송 통계의 정확성을 떨어뜨릴 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
mmc: spi: reset bytes_xfered before retrying CRC failures
mmc_spi_data_do() updates data->bytes_xfered after each block has been
transferred successfully. If a later block in the same data request
fails with a CRC error, data->bytes_xfered may therefore contain the
number of bytes completed before the failing block.
mmc_spi_request() has a private recovery path for such CRC failures. It
sends STOP_TRANSMISSION, clears data->error and jumps back to
crc_recover to issue the same command and data request again. However,
it does not clear data->bytes_xfered before the retry.
If the retry succeeds, the request is completed with the bytes from the
failed attempt still included in data->bytes_xfered. For a multi-block
request this can make the completed request report more bytes than were
transferred by the successful retry, and can even exceed the request size
when most blocks completed before the CRC error.
This is most likely to be observed on MMC-over-SPI systems where long
multi-block transfers occasionally hit a data CRC error but the
mmc_spi-internal retry succeeds. The data itself is retried, but the
completion accounting is not.
Clear data->bytes_xfered together with data->error before repeating the
request so the final completion reports only the bytes transferred by the
successful attempt.
📍 영향받는 시스템
Linux kernel (MMC-over-SPI 드라이버를 사용하는 시스템)
⚔️ 공격 벡터
직접적인 공격보다는 하드웨어 오류(CRC error) 상황에서 데이터 전송 통계 수치가 왜곡되는 논리적 오류입니다.
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 mmc_spi_request() 내의 bytes_xfered 초기화 로직을 적용해야 합니다.
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 수정된 패치 버전인지 확인합니다.
💻 영향받는 소프트웨어
NVIDIA Cloud Gaming Guest Driver for Linux