🇰🇷 한글 설명
Linux 커널 md(RAID) 드라이버의 status_resync() 함수에서 resync 진행률 계산 시 curr_resync와 recovery_active 값을 동시에 읽으면서 값이 오버플로우될 수 있습니다. 그 결과 진행률 막대 출력 루프가 과도하게 많은 '=' 문자를 출력하며 소프트 록업을 유발합니다. 수정은 이 경우 resync 상태를 MD_RESYNC_ACTIVE로 설정하여 진행 중인 resync를 보고하도록 합니다.
💡 쉬운 설명
리눅스 소프트웨어 RAID 기능에서 디스크 동기화 진행률을 표시하는 과정에 오류가 있어 시스템이 잠시 멈출 수 있습니다. 커널 업데이트로 이 문제가 해결됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
md: fix soft lockup in status_resync
status_resync() will calculate 'curr_resync - recovery_active' to show
user a progress bar like following:
[============>........] resync = 61.4%
'curr_resync' and 'recovery_active' is updated in md_do_sync(), and
status_resync() can read them concurrently, hence it's possible that
'curr_resync - recovery_active' can overflow to a huge number. In this
case status_resync() will be stuck in the loop to print a large amount
of '=', which will end up soft lockup.
Fix the problem by setting 'resync' to MD_RESYNC_ACTIVE in this case,
this way resync in progress will be reported to user.
📍 영향받는 시스템
소프트웨어 RAID(md)를 사용하는 수정 이전의 Linux 커널 버전
⚔️ 공격 벡터
로컬 권한이 있는 사용자가 RAID 동기화 상태 조회 시점에 맞춰 발생시키는 서비스 거부(소프트 록업) 형태이며, 원격 공격 경로는 확인되지 않음
🛡️ 대응 방법
배포판 제공 보안/커널 업데이트를 적용하여 수정된 커널로 재부팅
🔧 검증 코드
커널 버전이 배포판의 수정 패치가 포함된 버전인지 패키지 변경 로그와 대조하고, md 모듈이 로드되어 있지 않다면 이 취약점의 영향을 받지 않습니다.
uname -r && (grep -i 'md_mod\|raid' /proc/modules 2>/dev/null || echo 'md module not loaded') && cat /proc/mdstat 2>/dev/null | head -n 5