🇰🇷 한글 설명
Linux 커널의 dmaengine: idxd 구성 요소에서 idxd_setup_wqs() 함수 호출 시 발생하는 이중 해제(Double Free) 취약점입니다. 오류 처리 과정에서 초기화되지 않은 장치 객체를 해제하거나, 메모리 할당 실패 시 이전 반복문의 객체를 다시 해제하여 시스템 불안정성을 초래할 수 있습니다.
💡 쉬운 설명
컴퓨터의 핵심 부품인 커널이 메모리를 정리하는 과정에서 실수로 이미 지운 메모리를 또 지우려고 시도하는 오류입니다. 이로 인해 시스템이 갑자기 멈추거나 보안 공격에 취약해질 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
dmaengine: idxd: Fix double free in idxd_setup_wqs()
The clean up in idxd_setup_wqs() has had a couple bugs because the error
handling is a bit subtle. It's simpler to just re-write it in a cleaner
way. The issues here are:
1) If "idxd->max_wqs" is <= 0 then we call put_device(conf_dev) when
"conf_dev" hasn't been initialized.
2) If kzalloc_node() fails then again "conf_dev" is invalid. It's
either uninitialized or it points to the "conf_dev" from the
previous iteration so it leads to a double free.
It's better to free partial loop iterations within the loop and then
the unwinding at the end can handle whole loop iterations. I also
renamed the labels to describe what the goto does and not where the goto
was located.
📍 영향받는 시스템
Linux kernel (dmaengine: idxd 모듈 사용 시스템)
⚔️ 공격 벡터
특정 조건에서 idxd 설정을 유도하여 커널 메모리 오류를 일으키는 로컬 공격
🛡️ 대응 방법
idxd_setup_wqs() 오류 처리가 수정된 최신 Linux 커널 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 최신 버전인지 확인