🇰🇷 한글 설명
Linux 커널의 nilfs2 파일 시스템에서 sc_task 스레드가 정상적으로 종료되지 않을 경우 sc_timer가 제대로 닫히지 않는 취약점이 발견되었습니다. 이로 인해 sci를 해제할 때 활성화된 타이머가 남아 있어 시스템 오류를 유발할 수 있습니다. 이를 해결하기 위해 timer_shutdown_sync()를 사용하여 타이머 종료를 동기화하고 sc_state_lock을 통해 sc_task를 안전하게 NULL로 설정하도록 수정되었습니다.
💡 쉬운 설명
파일 시스템을 정리하는 과정에서 특정 작업 스레드가 제대로 꺼지지 않아, 사용 중인 타이머가 계속 살아있는 문제가 발생했습니다. 이로 인해 시스템이 메모리를 정리할 때 충돌이나 오류가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
nilfs2: avoid having an active sc_timer before freeing sci
Because kthread_stop did not stop sc_task properly and returned -EINTR,
the sc_timer was not properly closed, ultimately causing the problem [1]
reported by syzbot when freeing sci due to the sc_timer not being closed.
Because the thread sc_task main function nilfs_segctor_thread() returns 0
when it succeeds, when the return value of kthread_stop() is not 0 in
nilfs_segctor_destroy(), we believe that it has not properly closed
sc_timer.
We use timer_shutdown_sync() to sync wait for sc_timer to shutdown, and
set the value of sc_task to NULL under the protection of lock
sc_state_lock, so as to avoid the issue caused by sc_timer not being
properly shutdowned.
[1]
ODEBUG: free active (active state 0) object: 00000000dacb411a object type: timer_list hint: nilfs_construction_timeout
Call trace:
nilfs_segctor_destroy fs/nilfs2/segment.c:2811 [inline]
nilfs_detach_log_writer+0x668/0x8cc fs/nilfs2/segment.c:2877
nilfs_put_super+0x4c/0x12c fs/nilfs2/super.c:509
📍 영향받는 시스템
Linux kernel (nilfs2 파일 시스템을 사용하는 버전)
⚔️ 공격 벡터
로컬 공격자가 특정 파일 시스템 조작을 통해 커널 패닉이나 오류를 유발할 수 있음
🛡️ 대응 방법
nilfs2 관련 패치가 적용된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전인지 확인