CVE-2024-36950 in Linux정보

요약

\~에 의해 VulDB • 2026. 06. 12.

리눅스 커널에서 다음 취약점이 해결되었습니다:

firewire: ohci: ISR와 하위 절반(bottom half) 간에 버스 리셋 인터럽트를 마스크합니다.

FireWire OHCI 인터럽트 핸들러에서 버스 리셋 인터럽트가 발생하면, bus_reset_work가 해당 인터럽트를 처리하고 클리어할 때까지 버스 리셋 인터럽트를 마스크해야 합니다.

일반적으로 우리는 항상 버스 리셋 인터럽트를 마스크된 상태로 유지합니다. 잠시 후 발생하는 self-ID 인터럽트를 통해 버스 리셋을 추론하기 때문입니다. 2008년 a007bb857e0b26f5d8b73c2ff90782d9c0972620 커밋에서 버스 리셋 인터럽트 마스크를 해제하는 시나리오가 도입되었습니다. 디버그 파라미터 비트마스크에 OHCI_PARAM_DEBUG_BUSRESETS (8)이 설정되어 있으면, 이를 로깅하기 위해 버스 리셋 인터럽트의 마스크를 해제합니다.

irq_handler는 버스 리셋 인터럽트를 로깅하지만, irq_handler에서는 나중에 처리될 때까지 이벤트 플래그를 클리어할 수 없습니다. 따라서 irq_handler가 종료될 때 해당 이벤트 플래그가 여전히 설정된 상태로 남아 있습니다. 대응하는 인터럽트가 아직 마스크되지 않은 상태라면, 첫 번째 버스 리셋은 일반적으로 시스템이 프리징(freeze)되는 결과를 초래합니다. 이는 irq_handler가 종료될 때마다 다시 호출되기 때문입니다. 이 프리징 현상은 "modprobe firewire_ohci debug=-1" 옵션을 사용하여 firewire_ohci 모듈을 로드하면(모든 디버그 출력 활성화) 재현할 수 있습니다. 분명히 bus_reset_work가 충분히 빨리 호출되어 이벤트를 클리어하고 정상적인 동작이 계속되는 경우도 일부 존재합니다.

이 프리징 현상은 a007bb85 커밋 후 몇 달 만에 처음 보고되었지만, 지금까지 해결되지 않았습니다. 모듈 로드 후에 sysfs를 통해 디버그 레벨을 -1로 안전하게 설정할 수는 있었으나, 초기화 동안에만 버스 리셋 인터럽트의 마스크가 해제되므로 버스 리셋 인터럽트 로깅에는 효과가 없었습니다.

이제 irq_handler는 이벤트 플래그는 그대로 유지하되 버스 리셋 인터럽트를 마스크하므로, irq_handler가 다시 호출되지 않아 시스템 프리징이 발생하지 않습니다. OHCI_PARAM_DEBUG_BUSRESETS가 활성화되어 있으면 bus_reset_work가 이벤트를 처리한 후 인터럽트의 마스크를 해제하여 향후 발생하는 인터럽트가 의도대로 포착됩니다.

이 변경의 부수 효과로, OHCI_PARAM_DEBUG_BUSRESETS는 이제 초기 모듈 로딩 시뿐만 아니라 sysfs를 통해서도 활성화할 수 있습니다. 그러나 sysfs를 통해 활성화된 경우, bus_reset_work가 실행된 후 두 번째 버스 리셋부터야 비로소 버스 리셋 인터럽트 로깅이 유효해집니다.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

출처

Might our Artificial Intelligence support you?

Check our Alexa App!