🔍 CVE-2024-41031

5.5
CVSS Score
MEDIUM
2024-07-29
2026-10-30 13:17
✅ 완료

🇰🇷 한글 설명

Linux 커널의 mm/filemap 코드에서, ARM64에서 base page가 64KB일 때 HPAGE_PMD_ORDER가 13이 되어 xarray가 지원할 수 없는 PMD 크기 페이지 캐시를 할당하려 시도하는 문제가 있습니다. 이로 인해 커널 경고(WARNING)와 스택 트레이스가 발생합니다. 수정은 PMD 크기가 MAX_PAGECACHE_ORDER를 초과할 경우 해당 할당을 건너뛰고 일반 경로로 처리하도록 변경하는 것입니다.

💡 쉬운 설명

ARM64 시스템에서 특정 크기의 메모리 페이지를 캐시에 넣으려 할 때 커널이 잘못된 가정으로 경고를 띄우고 오작동할 수 있습니다. 이 문제는 큰 페이지 캐시 할당을 건너뛰고 일반 방식으로 처리하도록 고쳐졌습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: mm/filemap: skip to create PMD-sized page cache if needed On ARM64, HPAGE_PMD_ORDER is 13 when the base page size is 64KB. The PMD-sized page cache can't be supported by xarray as the following error messages indicate. ------------[ cut here ]------------ WARNING: CPU: 35 PID: 7484 at lib/xarray.c:1025 xas_split_alloc+0xf8/0x128 Modules linked in: nft_fib_inet nft_fib_ipv4 nft_fib_ipv6 nft_fib \ nft_reject_inet nf_reject_ipv4 nf_reject_ipv6 nft_reject nft_ct \ nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 \ ip_set rfkill nf_tables nfnetlink vfat fat virtio_balloon drm \ fuse xfs libcrc32c crct10dif_ce ghash_ce sha2_ce sha256_arm64 \ sha1_ce virtio_net net_failover virtio_console virtio_blk failover \ dimlib virtio_mmio CPU: 35 PID: 7484 Comm: test Kdump: loaded Tainted: G W 6.10.0-rc5-gavin+ #9 Hardware name: QEMU KVM Virtual Machine, BIOS edk2-20240524-1.el9 05/24/2024 pstate: 83400005 (Nzcv daif +PAN -UAO +TCO +DIT -SSBS BTYPE=--) pc : xas_split_alloc+0xf8/0x128 lr : split_huge_page_to_list_to_order+0x1c4/0x720 sp : ffff800087a4f6c0 x29: ffff800087a4f6c0 x28: ffff800087a4f720 x27: 000000001fffffff x26: 0000000000000c40 x25: 000000000000000d x24: ffff00010625b858 x23: ffff800087a4f720 x22: ffffffdfc0780000 x21: 0000000000000000 x20: 0000000000000000 x19: ffffffdfc0780000 x18: 000000001ff40000 x17: 00000000ffffffff x16: 0000018000000000 x15: 51ec004000000000 x14: 0000e00000000000 x13: 0000000000002000 x12: 0000000000000020 x11: 51ec000000000000 x10: 51ece1c0ffff8000 x9 : ffffbeb961a44d28 x8 : 0000000000000003 x7 : ffffffdfc0456420 x6 : ffff0000e1aa6eb8 x5 : 20bf08b4fe778fca x4 : ffffffdfc0456420 x3 : 0000000000000c40 x2 : 000000000000000d x1 : 000000000000000c x0 : 0000000000000000 Call trace: xas_split_alloc+0xf8/0x128 split_huge_page_to_list_to_order+0x1c4/0x720 truncate_inode_partial_folio+0xdc/0x160 truncate_inode_pages_range+0x1b4/0x4a8 truncate_pagecache_range+0x84/0xa0 xfs_flush_unmap_range+0x70/0x90 [xfs] xfs_file_fallocate+0xfc/0x4d8 [xfs] vfs_fallocate+0x124/0x2e8 ksys_fallocate+0x4c/0xa0 __arm64_sys_fallocate+0x24/0x38 invoke_syscall.constprop.0+0x7c/0xd8 do_el0_svc+0xb4/0xd0 el0_svc+0x44/0x1d8 el0t_64_sync_handler+0x134/0x150 el0t_64_sync+0x17c/0x180 Fix it by skipping to allocate PMD-sized page cache when its size is larger than MAX_PAGECACHE_ORDER. For this specific case, we will fall to regular path where the readahead window is determined by BDI's sysfs file (read_ahead_kb).

📍 영향받는 시스템

ARM64 아키텍처에서 base page 크기가 64KB인 Linux 커널 (수정이 포함된 커널 버전 이전의 6.10-rc 계열 및 해당 시점의 안정 버전)

⚔️ 공격 벡터

로컬 사용자가 파일 truncate/fallocate 같은 작업을 수행해 커널 경고와 비정상 동작을 유발할 수 있으며, 주로 서비스 거부(DoS) 성격입니다.

🛡️ 대응 방법

배포판이 제공하는 CVE-2024-41031 수정이 포함된 최신 Linux 커널 패키지로 업데이트 후 재부팅합니다.

🔧 검증 코드

출력된 커널 버전이 배포판의 수정된 버전 이상인지 확인하고, 로그에 xas_split_alloc 관련 WARNING이 없으면 해당 문제가 발생하지 않은 것입니다.

Shell / Script
uname -r && grep -i 'CVE-2024-41031' /var/log/kern.log 2>/dev/null | tail -n 5

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

💻 영향받는 소프트웨어

Linux Kernel