🇰🇷 한글 설명
Linux 커널 quota 시스템에서 dquot_free_inode와 quota_off 함수 간의 race condition으로 인해 NULL pointer dereference가 발생합니다. inode의 quota 포인터를 확인한 후 NULL로 설정되는 사이에 사용될 때 커널 패닉이 유발됩니다.
💡 쉬운 설명
두 개의 프로세스가 동시에 파일의 디스크 할당량 정보에 접근할 때, 한 프로세스가 정보를 확인했지만 실제 사용하기 전에 다른 프로세스가 그것을 삭제해버려서 충돌합니다. 이로 인해 시스템이 먹통이 될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
quota: Fix potential NULL pointer dereference
Below race may cause NULL pointer dereference
P1 P2
dquot_free_inode quota_off
drop_dquot_ref
remove_dquot_ref
dquots = i_dquot(inode)
dquots = i_dquot(inode)
srcu_read_lock
dquots[cnt]) != NULL (1)
dquots[type] = NULL (2)
spin_lock(&dquots[cnt]->dq_dqb_lock) (3)
....
If dquot_free_inode(or other routines) checks inode's quota pointers (1)
before quota_off sets it to NULL(2) and use it (3) after that, NULL pointer
dereference will be triggered.
So let's fix it by using a temporary pointer to avoid this issue.
📍 영향받는 시스템
Linux 커널 (quota 메커니즘이 활성화된 모든 버전)
⚔️ 공격 벡터
로컬 공격자가 동시에 여러 파일 작업(inode 할당 해제)과 quota 시스템 비활성화를 트리거하여 커널 패닉 유발
🛡️ 대응 방법
Linux 커널 최신 버전으로 업데이트하거나 race condition 패치 적용
🔧 검증 코드
커널 버전과 quota 마운트 여부를 확인합니다. quota가 활성화되어 있고 취약한 커널 버전이면 영향을 받습니다.
uname -r && grep -i quota /proc/mounts | head -1