🇰🇷 한글 설명
Linux 커널의 md/raid10 구성 요소에서 still_degraded 변수의 논리값이 반대로 설정되는 오류가 발견되었습니다. 이로 인해 디스크 복구 과정에서 비트맵 데이터가 잘못 초기화되어, 데이터가 최신 상태가 아님에도 불구하고 동기화가 완료된 것으로 간주되는 데이터 무결성 손상이 발생할 수 있습니다.
💡 쉬운 설명
디스크를 복구하는 과정에서 시스템이 실수로 '복구가 필요 없다'고 잘못 판단하는 버그입니다. 이 때문에 실제로는 데이터가 깨져 있는데도 시스템은 정상이라고 믿게 되어 데이터가 손실될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
md/raid10: fix still_degraded being inverted in raid10_sync_request()
Commit fe6a19d40ceb ("md/md-bitmap: merge md_bitmap_start_sync() into
bitmap_operations") converted still_degraded from int to bool, but
inverted the assignment in the loop that checks whether the array will
still be degraded after the current device is recovered:
"still_degraded = 1" became "still_degraded = false".
As a result, recovering a device while another mirror is still missing
calls md_bitmap_start_sync() with degraded == false, which clears bitmap
bits that the still-missing device needs. When that device is re-added,
its bitmap-based recovery finds the bits already cleared and skips every
region written while the array was degraded, so it is marked In_sync
while holding stale data: silent corruption.
Reproducer (raid10 near=2, 4 disks, internal bitmap):
- fail and remove one disk of each mirror pair
- write to the degraded array
- re-add both disks and let recovery finish
- "check" reports mismatch_cnt=262272 after 256 MiB of degraded
writes and file contents differ; the second disk's "recovery"
completes in milliseconds because everything is skipped
The same conversion in raid1 got it right (still_degraded = true).
Restore the correct value.
📍 영향받는 시스템
Linux Kernel (md/raid10 모듈 사용 시스템)
⚔️ 공격 벡터
직접적인 외부 공격보다는 하드웨어 장애 및 복구 과정에서 발생하는 데이터 무결성 손상 (Silent Data Corruption)
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 커밋(6fa19d40ceb) 이후의 버전인지 확인하십시오.