🇰🇷 한글 설명
Linux 커널의 debugobjects 구성 요소에서 초기 부팅 중 하드웨어 인터럽트(hardirq) 컨텍스트 내에서 fill_pool() 함수가 호출되어 발생하는 취약점입니다. ARM64 시스템에서 PREEMPT_RT 커널 부팅 시 스케줄러가 활성화되기 전 인터럽트가 발생하면 교착 상태(deadlock)가 유발될 수 있습니다.
💡 쉬운 설명
컴퓨터가 처음 켜지는 아주 짧은 순간에 시스템이 혼란을 겪어 멈춰버릴 수 있는 문제입니다. 특정 상황에서 시스템이 스스로를 기다리게 만드는 '교착 상태'에 빠질 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
debugobjects: Don't call fill_pool() in early boot hardirq context
When booting a debug PREEMPT_RT kernel on an ARM64 system, a "inconsistent
{HARDIRQ-ON-W} -> {IN-HARDIRQ-W} usage" lockdep warning message was
reported to the console.
During early boot, interrupts are enabled before the scheduler is
enabled. In this window (before SYSTEM_SCHEDULING is set) interrupts can
fire and in the hard interrupt context handler attempt to fill the pool
This can lead to a deadlock when the interrupt occurred when the interrupt
hits a region which holds a lock that is required to be taken in the
allocation path.
Add a new can_fill_pool() helper and reorder the exception rule and forbid
this scenario by excluding allocations from hard interrupt context.
📍 영향받는 시스템
ARM64 아키텍처 기반의 PREEMPT_RT 커널을 사용하는 Linux 시스템
⚔️ 공격 벡터
로컬 공격자가 시스템 부팅 과정에서 특정 하드웨어 인터럽트를 유도하여 교착 상태를 발생시킴
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 can_fill_pool() 헬퍼 함수가 적용된 패치를 적용함
🔧 검증 코드
출력 결과에서 ARM64 아키텍처와 PREEMPT_RT 설정 여부를 확인하여 취약한 환경인지 판단함
uname -a && grep -i 'PREEMPT_RT' /proc/config.gz 2>/dev/null || zgrep -i 'CONFIG_PREEMPT_RT' /boot/config-$(uname -r)