🇰🇷 한글 설명
Linux 커널의 dax 서브시스템에서 dax_fs_exit() 호출 시 inode를 flush하지 않고 캐시를 파괴하는 문제가 있습니다. 이로 인해 nd_pmem 모듈을 로드 후 언로드할 때 dax_cache에 객체가 남아 커널 BUG가 발생할 수 있습니다. 수정은 캐시 파괴 전에 rcu_barrier()를 호출하는 것입니다.
💡 쉬운 설명
리눅스 커널의 메모리 관리 부분에서 정리 순서가 잘못되어, 특정 드라이버 모듈을 제거할 때 시스템이 오류 상태가 될 수 있습니다. 커널 업데이트로 정리 순서를 고치면 문제가 해결됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
dax: make sure inodes are flushed before destroy cache
A bug can be triggered by following command
$ modprobe nd_pmem && modprobe -r nd_pmem
[ 10.060014] BUG dax_cache (Not tainted): Objects remaining in dax_cache on __kmem_cache_shutdown()
[ 10.060938] Slab 0x0000000085b729ac objects=9 used=1 fp=0x000000004f5ae469 flags=0x200000000010200(slab|head|node)
[ 10.062433] Call Trace:
[ 10.062673] dump_stack_lvl+0x34/0x44
[ 10.062865] slab_err+0x90/0xd0
[ 10.063619] __kmem_cache_shutdown+0x13b/0x2f0
[ 10.063848] kmem_cache_destroy+0x4a/0x110
[ 10.064058] __x64_sys_delete_module+0x265/0x300
This is caused by dax_fs_exit() not flushing inodes before destroy cache.
To fix this issue, call rcu_barrier() before destroy cache.
📍 영향받는 시스템
nd_pmem/DAX 기능을 사용하는 Linux 커널 (수정 전 버전, 영구 메모리 장치 환경)
⚔️ 공격 벡터
로컬 권한을 가진 사용자가 nd_pmem 모듈을 적재 후 제거하여 커널 BUG(서비스 거부)를 유발할 수 있음
🛡️ 대응 방법
패치된 Linux 커널 버전으로 업데이트하거나, 배포판의 보안 업데이트를 적용하세요.
🔧 검증 코드
출력된 커널 버전을 배포판의 패치 목록과 비교하고, dax/nd_pmem 모듈이 로드되어 있지 않다면 이 취약점에 노출되지 않은 상태입니다.
uname -r && (lsmod | grep -E 'nd_pmem|dax') 2>/dev/null; ls /sys/module/dax 2>/dev/null