CVE-2024-36962 in Linux
요약
\~에 의해 VulDB • 2026. 07. 11.
리눅스 커널에서 다음 취약점이 해결되었습니다:
net: ks8851: BH(Bottom Half) 비활성화 대신 인터럽트 핸들러 내에서 RX 패킷을 큐에 추가합니다.
현재 이 드라이버는 `netif_rx()` 종료 시 `net_rx_action()` softirq가 트리거되는 것을 방지하기 위해 IRQ 핸들러에서 `local_bh_disable()/local_bh_enable()`를 사용합니다. `net_rx_action()`은 이 드라이버의 `.start_xmit` 콜백을 트리거할 수 있는데, 이는 IRQ 핸들러와 동일한 락으로 보호되고 있습니다. 따라서 잠금(lock)으로 보호되는 IRQ 핸들러의 임계 섹션 내에서 `netif_rx()`에서 `.start_xmit`를 호출하면 이미 획득된 락을 다시 확보하려고 시도하여 시스템이 멈출(hang) 수 있습니다.
`local_bh_disable()/local_bh_enable()` 접근 방식은 IRQ 핸들러가 스핀락(spinlock)으로 보호되는 경우에만 작동하지만, mutex로 보호될 때는 작동하지 않습니다. 즉, 이 방법은 병렬 버스 인터페이스를 사용하는 KS8851에서는 동작하지만 SPI 버스 인터페이스를 사용하는 KS8851에서는 동작하지 않습니다.
BH 조작을 제거하고, 잠금으로 보호되는 IRQ 핸들러 코드 내부에서 `netif_rx()`를 호출하는 대신, 수신된 모든 SKB(스케줄 가능 버퍼)를 먼저 IRQ 핸들러 내의 큐에 추가합니다. 그런 다음 IRQ 핸들러가 잠금으로 보호되는 임계 섹션을 벗어나면 큐에 있는 모든 SKB를 꺼내어 `netif_rx()`로 전달합니다. 이 시점에서는 `netif_rx()` 호출이 IRQ 핸들러를 보호하는 락 외부에서 이루어지므로, `net_rx_action()` softirq를 트리거해도 안전합니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.