🇰🇷 한글 설명
Linux 커널의 ARM 아키텍처에서 PREEMPT_RT 기능이 활성화되었을 때 POSIX CPU 타이머 설정이 누락되는 취약점입니다. 이로 인해 CPU 타이머 만료 처리가 잘못된 컨텍스트(hard IRQ)에서 실행되어 시스템 충돌(BUG)을 유발할 수 있습니다.
💡 쉬운 설명
컴퓨터의 핵심 두뇌 역할을 하는 커널에서 시간 측정 기능이 잘못된 방식으로 작동하여 시스템이 멈추거나 오류가 발생할 수 있는 문제입니다. 특정 설정이 켜진 ARM 기반 기기에서 시스템 안정성을 해칠 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ARM: 9483/1: select HAVE_POSIX_CPU_TIMERS_TASK_WORK
Commit c6e61c06d606 ("ARM: 9463/1: Allow to enable RT") enabled PREEMPT_RT
on ARM but did not select HAVE_POSIX_CPU_TIMERS_TASK_WORK. This leaves
CONFIG_POSIX_CPU_TIMERS_TASK_WORK disabled, so CPU timers expire in hard
IRQ context.
On PREEMPT_RT this makes run_posix_cpu_timers() take the sleeping
sighand->siglock:
BUG: sleeping function called from invalid context at spinlock_rt.c:48
rt_spin_lock from lock_task_sighand
lock_task_sighand from run_posix_cpu_timers
run_posix_cpu_timers from update_process_times
ARM handles TIF_NOTIFY_RESUME on all return-to-user paths, including v7-M.
ARM32 KVM host support was removed by commit 541ad0150ca4 ("arm: Remove
32bit KVM host support"), so the select need not be conditional on KVM.
Select it to defer POSIX CPU timer expiry to task context.
Reproduced with setrlimit(RLIMIT_CPU, ...) and a busy loop. The same path
is used by setitimer(ITIMER_PROF or ITIMER_VIRTUAL) and POSIX CPU timers
created with timer_create().
📍 영향받는 시스템
PREEMPT_RT가 활성화된 ARM 아키텍처 기반 Linux 커널
⚔️ 공격 벡터
직접적인 외부 공격보다는 특정 타이머 기능을 사용하는 로컬 프로세스에 의해 시스템 충돌 유발 가능
🛡️ 대응 방법
커널 패치(Commit c6e61c06d606 관련 수정 사항 포함)를 적용하여 HAVE_POSIX_CPU_TIMERS_TASK_WORK 설정을 활성화해야 함
🔧 검증 코드
명령어 결과에서 CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y가 확인되면 패치가 적용된 상태입니다.
uname -a && zgrep CONFIG_POSIX_CPU_TIMERS_TASK_WORK /proc/config.gz 2>/dev/null || grep CONFIG_POSIX_CPU_TIMERS_TASK_WORK /boot/config-$(uname -r)