🇰🇷 한글 설명
Linux 커널의 i2c:imx 드라이버에서 슬레이브 등록 시 레이스 컨디션과 오류 처리 미흡으로 인한 취약점이 발견되었습니다. pm_runtime_resume_and_get() 실패 시 슬레이브 포인터가 NULL로 초기화되지 않아 이후 등록이 실패하거나, 인터럽트 핸들러와의 경합으로 인해 NULL 포인터 역참조가 발생할 수 있습니다.
💡 쉬운 설명
장치를 연결하는 과정에서 오류가 발생했을 때 뒷정리가 제대로 되지 않아 시스템이 오작동하거나 멈출 수 있는 문제입니다. 특히 장치 신호를 처리하는 과정에서 데이터가 꼬여 프로그램이 갑자기 종료될 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
i2c: imx: Fix slave registration race and error handling
In i2c_imx_reg_slave(), the slave pointer was assigned before
pm_runtime_resume_and_get(). If pm_runtime_resume_and_get() failed,
the error path returned without clearing i2c_imx->slave, leaving it
non-NULL and causing all subsequent registration attempts to fail
with -EBUSY.
Additionally, because this driver uses a shared IRQ, the interrupt
handler i2c_imx_isr() can execute concurrently and, after acquiring
slave_lock, dereference i2c_imx->slave. The previous fix attempt
added a lockless i2c_imx->slave = NULL on the error path, but that
could race with the ISR under the lock and still cause a NULL pointer
dereference.
Fix both issues by deferring the assignment of i2c_imx->slave and
i2c_imx->last_slave_event to after a successful resume, and by
performing the assignment inside the slave_lock critical section.
This guarantees that the slave pointer is never left stale on the
error path and is always valid when observed by the interrupt handler.
📍 영향받는 시스템
Linux kernel (i2c:imx driver components)
⚔️ 공격 벡터
로컬 공격자가 특정 I2C 장치 등록 과정을 유도하여 커널 패닉 또는 서비스 거부(DoS) 유발
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인