🇰🇷 한글 설명
Linux 커널의 exFAT 파일시스템에서 비트맵 로딩 시 kmalloc_array를 사용하던 것을 kvmalloc_array/kvfree로 변경하여 물리 메모리 연속 할당 실패 문제를 해결했습니다. 메모리 단편화 상황에서 USB 등 exFAT 장치 마운트가 실패하던 문제가 수정되었습니다.
💡 쉬운 설명
USB 같은 저장장치를 꽂았을 때 메모리가 부족하면 인식이 안 되는 문제가 있었습니다. 이 수정으로 메모리가 조각난 상태에서도 장치를 정상적으로 인식할 수 있게 되었습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
exfat: use kvmalloc_array/kvfree instead of kmalloc_array/kfree
The call stack shown below is a scenario in the Linux 4.19 kernel.
Allocating memory failed where exfat fs use kmalloc_array due to
system memory fragmentation, while the u-disk was inserted without
recognition.
Devices such as u-disk using the exfat file system are pluggable and
may be insert into the system at any time.
However, long-term running systems cannot guarantee the continuity of
physical memory. Therefore, it's necessary to address this issue.
Binder:2632_6: page allocation failure: order:4,
mode:0x6040c0(GFP_KERNEL|__GFP_COMP), nodemask=(null)
Call trace:
[242178.097582] dump_backtrace+0x0/0x4
[242178.097589] dump_stack+0xf4/0x134
[242178.097598] warn_alloc+0xd8/0x144
[242178.097603] __alloc_pages_nodemask+0x1364/0x1384
[242178.097608] kmalloc_order+0x2c/0x510
[242178.097612] kmalloc_order_trace+0x40/0x16c
[242178.097618] __kmalloc+0x360/0x408
[242178.097624] load_alloc_bitmap+0x160/0x284
[242178.097628] exfat_fill_super+0xa3c/0xe7c
[242178.097635] mount_bdev+0x2e8/0x3a0
[242178.097638] exfat_fs_mount+0x40/0x50
[242178.097643] mount_fs+0x138/0x2e8
[242178.097649] vfs_kern_mount+0x90/0x270
[242178.097655] do_mount+0x798/0x173c
[242178.097659] ksys_mount+0x114/0x1ac
[242178.097665] __arm64_sys_mount+0x24/0x34
[242178.097671] el0_svc_common+0xb8/0x1b8
[242178.097676] el0_svc_handler+0x74/0x90
[242178.097681] el0_svc+0x8/0x340
By analyzing the exfat code,we found that continuous physical memory
is not required here,so kvmalloc_array is used can solve this problem.
📍 영향받는 시스템
exFAT 파일시스템을 사용하는 Linux 커널 (수정 이전 버전, 예: 4.19 계열)
⚔️ 공격 벡터
직접적인 원격 공격 경로는 없으며, 메모리 단편화 상태에서 exFAT 장치 마운트 시 기능 장애가 발생할 수 있음
🛡️ 대응 방법
배포판의 최신 커널 업데이트를 적용하여 해당 패치가 포함된 버전으로 재부팅
🔧 검증 코드
출력된 커널 버전을 배포판 보안 공지에서 해당 패치 포함 버전과 비교하고, 필요 시 'lsmod | grep exfat'으로 exFAT 모듈 로드 여부를 확인