CVE-2026-46130 in Linux
요약
\~에 의해 VulDB • 2026. 05. 28.
리눅스 커널에서 다음 취약점이 해결되었습니다:
dm-verity-fec: 블록 간에 분할된 패리티 바이트 읽기 수정 (3차 버전)
fec_decode_bufs() 함수는 디코딩하는 첫 번째 RS 부호화 단어의 패리티 바이트가 패리티 블록 간에 분할되지 않는다고 가정합니다.
하지만 이 가정은 잘못되었습니다. 예를 들어 v->fec->block_size == 4096 && v->fec->roots == 17 && fio->nbufs == 1인 경우를 고려해 보세요. 이 경우 fec_decode_bufs() 호출마다 v->fec->roots * (fio->nbufs << DM_VERITY_FEC_BUF_RS_BITS) = 272개의 패리티 바이트가 소모됩니다.
각 메시지 블록의 패리티 데이터가 블록 경계에서 시작한다는 점을 고려하면, 패리티 데이터 내의 바이트 정렬은 272*i mod 4096으로 반복되며 3개의 패리티 블록이 모두 소모될 때까지 진행됩니다. 16번째 호출(i=15) 시 정렬은 첫 번째 블록 내에서 4080바이트 지점이 됩니다. 해당 블록에는 16바이트만 남아있지만, 17개의 패리티 바이트가 필요합니다. 이로 인해 코드는 패리티 블록 버퍼의 범위를 벗어난(out-of-bounds) 데이터를 읽게 됩니다.
다행히 이는 일반적으로 발생하지 않습니다. 이는 fec_roots의 특정 비기본값(non-default) 값과 메모리가 부족하여 최대 버퍼 수를 할당할 수 없는 경우에만 발생할 수 있기 때문입니다. 예를 들어 block_size=4096인 경우 다음 경우들만 영향을 받습니다:
fec_roots=17: nbufs in [1, 3, 5, 15]
fec_roots=19: nbufs in [1, 229]
fec_roots=21: nbufs in [1, 3, 5, 13, 15, 39, 65, 195]
fec_roots=23: nbufs in [1, 89]
어쨌든 패리티 블록 읽기 방식을 리팩토링하여 이를 수정합니다.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.