🇰🇷 한글 설명
Linux 커널의 dmaengine mmp_pdma 모듈에서 scatterlist의 길이를 잘못 계산하는 취약점이 발견되었습니다. mmp_pdma_prep_slave_sg() 함수가 현재 항목의 길이가 아닌 리스트의 첫 번째 항목 길이를 참조하여, 다중 SG 리스트 사용 시 경계 외 읽기(out-of-bounds read) 또는 데이터 손실이 발생할 수 있습니다.
💡 쉬운 설명
데이터를 여러 조각으로 나누어 처리할 때, 각 조각의 실제 크기를 확인하지 않고 첫 번째 조각의 크기만 계속 사용하는 오류가 있습니다. 이로 인해 데이터가 잘못 읽히거나 중요한 정보가 유실될 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
dmaengine: mmp_pdma: fix wrong sg length in mmp_pdma_prep_slave_sg()
In mmp_pdma_prep_slave_sg(), for_each_sg() iterates the scatterlist
putting each entry into 'sg', but the entry length is read from 'sgl'
(the list head) instead of 'sg' (the current entry):
for_each_sg(sgl, sg, sg_len, i) {
addr = sg_dma_address(sg);
avail = sg_dma_len(sgl); /* should be 'sg' */
Consequently 'avail' is always the length of the first entry. For
multi-sg lists this causes out-of-bounds reads when a later entry is
shorter than the first, and silent data loss when it is longer.
Single-sg or uniformly-sized lists happen to mask the issue.
📍 영향받는 시스템
Linux kernel (dmaengine: mmp_pdma 모듈을 사용하는 시스템)
⚔️ 공격 벡터
잘못된 크기의 scatterlist를 구성하여 DMA 전송을 요청함으로써 메모리 경계 외 읽기 유도
🛡️ 대응 방법
해당 취약점이 수정된 최신 Linux 커널 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 패치가 적용된 보안 업데이트 버전인지 확인
💻 영향받는 소프트웨어
NVIDIA Cloud Gaming Guest Driver for Linux