🇰🇷 한글 설명
Linux 커널의 dm-io 구성 요소에서 발생한 문제로, DM_IO_BIO 요청 처리 시 소스 bio의 biovec를 복사하는 대신 클론하는 방식으로 수정되었습니다. 기존 방식은 정렬되지 않은 직접 I/O(O_DIRECT) 처리 시 섹터 기반 계산 오류로 인해 빈 bio를 무한히 제출하여 I/O가 중단되는(hang) 현상이 발생했습니다.
💡 쉬운 설명
데이터를 저장하거나 읽을 때 데이터의 위치를 계산하는 과정에서 작은 오차가 발생하여 컴퓨터가 무한 루프에 빠지는 버그입니다. 이로 인해 시스템의 입출력 작업이 멈추고 컴퓨터가 응답하지 않을 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
dm-io: clone the source bio instead of copying its biovec
For DM_IO_BIO requests, do_region() built each destination bio by walking
the source bio's biovec and re-adding the pages one at a time, tracking
the remaining transfer in sectors. The vector lengths are byte granular
and need not be sector aligned (e.g. a misaligned O_DIRECT buffer split
across pages), so the sector-based accounting could lose a sub-sector
fragment: to_sector() truncated the remainder and the outer loop spun
forever submitting empty bios, hanging the I/O.
There is no need to rebuild the biovec at all. The destination reads into
(or writes from) exactly the same pages as the source bio, so the bio can
simply clone the source's biovec with bio_alloc_clone() and remap it to
the target device. The clone inherits the source's iterator and alignment,
and the block layer splits it to the target's limits on submission, so the
whole region maps to a single cloned bio with no manual page copying or
sector accounting.
This removes the per-page copy path (and its open-coded bvec dpages
helpers) for bio-backed I/O and fixes the hang on misaligned direct I/O to
a dm-mirror device. Page-list, vma and kmem sources keep the existing copy
path.
📍 영향받는 시스템
Linux kernel (dm-mirror 사용 환경)
⚔️ 공격 벡터
직접적인 공격보다는 정렬되지 않은(misaligned) O_DIRECT I/O 요청을 통해 시스템 서비스 거부(DoS) 유발 가능
🛡️ 대응 방법
해당 취약점이 해결된 최신 버전의 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 패치가 적용된 배포판의 보안 업데이트 버전인지 확인