🇰🇷 한글 설명
Linux 커널의 i.MX mailbox 드라이버에서 채널 종료(shutdown) 처리 중 발생하는 경쟁 조건을 수정한 패치입니다. ISR과 shutdown 경로가 동시에 실행될 때 RX 인터럽트가 다시 활성화되어 공유 핸들러 환경에서 문제를 일으킬 수 있어, 채널 종료 상태를 나타내는 shutdown 플래그를 추가하고 락으로 직렬화했습니다.
💡 쉬운 설명
기기 간 메시지를 주고받는 통로를 닫는 순간, 타이밍이 맞으면 이미 닫힌 통로의 알림 기능이 다시 켜지는 문제가 있었습니다. 이를 막기 위해 통로가 닫히는 중임을 표시하고 잠금으로 순서를 맞춘 수정입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
mailbox: imx: Add a channel shutdown field
sashiko complained about possible teardown problem. The scenario
CPU 0 CPU 1
imx_mu_isr() imx_mu_shutdown()
imx_mu_xcr_rmw(priv, IMX_MU_RCR, 0, IMX_MU_xCR_RIEn(priv->dcfg->type, cp->idx));
imx_mu_specific_rx()
imx_mu_xcr_rmw(priv, IMX_MU_RCR, IMX_MU_xCR_RIEn(priv->dcfg->type, 0), 0);
free_irq()
The RX event remains enabled because in this short window the RX event
was disabled in ->shutdown() while the interrupt was active and then
enabled again by the ISR while ->shutdown waited in free_irq().
This race requires timing and if happens can be problematic on shared
handlers if the "removed" channel triggers an interrupt. In this case
the irq-core will shutdown the interrupt with the "nobody cared"
message.
Introduce imx_mu_con_priv::shutdown to signal that the channel is
shutting down. This flag is set with the lock held (by
imx_mu_xcr_clr_shut()). The unmask side uses imx_mu_xcr_set_act() which
only enables the event if the channel has not been shutdown and
serialises on the same lock.
📍 영향받는 시스템
i.MX 기반 임베디드 장치를 사용하는 Linux 커널(수정 패치 적용 전 버전, 상세 버전 범위는 확인 필요)
⚔️ 공격 벡터
일반적으로 로컬 타이밍 경쟁 조건으로, 원격 공격 경로는 명확하지 않으며 시스템 불안정성 또는 인터럽트 처리 오류를 유발할 수 있음
🛡️ 대응 방법
사용 중인 Linux 커널을 해당 수정이 포함된 최신 안정 버전 또는 배포판 보안 업데이트로 업그레이드
🔧 검증 코드
출력된 커널 버전을 배포판 보안 공지 또는 Linux 커널 git 기록에서 해당 패치(mailbox: imx: Add a channel shutdown field)가 포함된 버전과 비교하여 최신 여부를 확인