🇰🇷 한글 설명
Linux 커널의 slimbus 드라이버에서 인터럽트 지연 발생 시 트랜잭션 ID(TID)가 해제되지 않는 취약점이 발견되었습니다. 이로 인해 잘못된 TID를 참조하게 되어 qcom_slim_ngd_rx_msgq_cb() 함수 내에서 유효하지 않은 메모리 접근이 발생하고 커널 패닉이 유발될 수 있습니다.
💡 쉬운 설명
시스템 작업 중 예기치 않은 지연이 생기면 메모리 관리 번호가 제대로 삭제되지 않아 시스템이 혼란에 빠집니다. 이로 인해 컴퓨터가 갑자기 멈추거나 재부팅되는 현상이 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
slimbus: messaging: Free transaction ID in delayed interrupt scenario
In case of interrupt delay for any reason, slim_do_transfer()
returns timeout error but the transaction ID (TID) is not freed.
This results into invalid memory access inside
qcom_slim_ngd_rx_msgq_cb() due to invalid TID.
Fix the issue by freeing the TID in slim_do_transfer() before
returning timeout error to avoid invalid memory access.
Call trace:
__memcpy_fromio+0x20/0x190
qcom_slim_ngd_rx_msgq_cb+0x130/0x290 [slim_qcom_ngd_ctrl]
vchan_complete+0x2a0/0x4a0
tasklet_action_common+0x274/0x700
tasklet_action+0x28/0x3c
_stext+0x188/0x620
run_ksoftirqd+0x34/0x74
smpboot_thread_fn+0x1d8/0x464
kthread+0x178/0x238
ret_from_fork+0x10/0x20
Code: aa0003e8 91000429 f100044a 3940002b (3800150b)
---[ end trace 0fe00bec2b975c99 ]---
Kernel panic - not syncing: Oops: Fatal exception in interrupt.
📍 영향받는 시스템
Linux Kernel (slimbus/qcom_slim_ngd_ctrl 관련 모듈 사용 시스템)
⚔️ 공격 벡터
특정 하드웨어 인터럽트 지연을 유도하여 커널 메모리 오류 및 시스템 중단(DoS) 유발
🛡️ 대응 방법
slimb_do_transfer() 함수에서 타임아웃 발생 시 TID를 해제하도록 커널 패치를 적용하십시오.
🔧 검증 코드
현재 커널 버전을 확인하고 커널 심볼에 관련 함수가 존재하는지 확인하여 패치 적용 여부를 검토합니다.
uname -r && grep -r 'slim_do_transfer' /proc/kallsyms 2>/dev/null