🇰🇷 한글 설명
Linux 커널의 dma-buf/sw-sync 모듈에서 spin_unlock_irq() 함수 사용 오류로 인한 IRQ 상태 불일치 문제입니다. sync_print_obj() 함수에서 잘못된 스핀락 해제 호출이 lockdep 경고를 발생시키며, IRQ 활성화 상태 관리의 혼란을 초래합니다.
💡 쉬운 설명
리눅스 커널의 메모리 관리 코드에서 잘못된 잠금 해제 방식이 사용되어 시스템 경고가 발생합니다. 주로 커널 개발/디버깅 환경에서 문제가 나타나며 일반 사용자 보안에는 직접적 영향이 제한적입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
dma-buf/sw-sync: don't enable IRQ from sync_print_obj()
Since commit a6aa8fca4d79 ("dma-buf/sw-sync: Reduce irqsave/irqrestore from
known context") by error replaced spin_unlock_irqrestore() with
spin_unlock_irq() for both sync_debugfs_show() and sync_print_obj() despite
sync_print_obj() is called from sync_debugfs_show(), lockdep complains
inconsistent lock state warning.
Use plain spin_{lock,unlock}() for sync_print_obj(), for
sync_debugfs_show() is already using spin_{lock,unlock}_irq().
📍 영향받는 시스템
Linux kernel 6.1 이상의 dma-buf/sw-sync 모듈이 포함된 시스템
⚔️ 공격 벡터
로컬 시스템 접근으로 debugfs를 통해 sync_debugfs_show() 함수 호출 시 lockdep 경고 트리거 가능
🛡️ 대응 방법
Linux 커널을 최신 패치가 적용된 버전으로 업데이트하거나 spin_lock/spin_unlock()을 올바르게 사용하는 코드 패치 적용
🔧 검증 코드
커널 버전 확인 후 dma-buf/sw-sync의 취약한 패턴이 있는지 검색합니다. 패턴이 없으면 패치가 적용된 상태입니다.
cat /proc/version | grep -oP 'Linux version \K[0-9.]+' && grep -r 'spin_unlock_irq.*sync_print_obj' /usr/src/linux*/drivers/dma-buf/ 2>/dev/null || echo 'Not vulnerable'