CVE-2024-44943 in Linux정보

요약

\~에 의해 VulDB • 2026. 08. 24.

리눅스 커널에서 다음 취약점이 해결되었습니다:

mm: gup: try_grab_folio의 오용 중단

SEV 가상 머신을 실행할 때 CMA 메모리에서 folio를 고정(pinning)하는 동안 커널 경고가 보고되었습니다. 스플래트(splat)는 다음과 같습니다:

[ 464.325306] WARNING: CPU: 13 PID: 6734 at mm/gup.c:1313 __get_user_pages+0x423/0x520
[ 464.325464] CPU: 13 PID: 6734 Comm: qemu-kvm Kdump: loaded Not tainted 6.6.33+ #6
[ 464.325477] RIP: 0010:__get_user_pages+0x423/0x520
[ 464.325515] Call Trace:
[ 464.325520]
[ 464.325523] ? __get_user_pages+0x423/0x520
[ 464.325528] ? __warn+0x81/0x130
[ 464.325536] ? __get_user_pages+0x423/0x520
[ 464.325541] ? report_bug+0x171/0x1a0
[ 464.325549] ? handle_bug+0x3c/0x70
[ 464.325554] ? exc_invalid_op+0x17/0x70
[ 464.325558] ? asm_exc_invalid_op+0x1a/0x20
[ 464.325567] ? __get_user_pages+0x423/0x520
[ 464.325575] __gup_longterm_locked+0x212/0x7a0
[ 464.325583] internal_get_user_pages_fast+0xfb/0x190
[ 464.325590] pin_user_pages_fast+0x47/0x60
[ 464.325598] sev_pin_memory+0xca/0x170 [kvm_amd]
[ 464.325616] sev_mem_enc_register_region+0x81/0x130 [kvm_amd]

yangge의 분석에 따르면, SEV 가상 머신을 시작할 때 pin_user_pages_fast(..., FOLL_LONGTERM, ...)를 호출하여 메모리를 고정합니다. 그러나 페이지가 CMA 영역에 있으므로 fast GUP는 실패하고 try_grab_folio() 내의 longterm pinned 가능 검사로 인해 slow path로 폴백됩니다.

slow path에서는 페이지를 고정한 다음 CMA 영역 밖으로 마이그레이션하려고 시도합니다. 하지만 slow path도 try_grab_folio()를 사용하여 페이지를 고정하므로, 동일한 검사로 인해 실패하고 위의 경고가 트리거됩니다.

또한, try_grab_folio()는 원래 fast path에서 사용되도록 의도되었으며, zero가 아닌 경우 add ref를 사용하여 folio의 참조 카운트를 증가시킵니다. slow path에서는 최소 하나의 안정적인 참조가 보장되므로 간단한 원자적 추가(atomic add)를 사용할 수 있습니다. 성능 차이는 미미하겠지만, 오용은 혼란스럽고 잘못된 인식을 줄 수 있습니다.

try_grab_folio()를 try_grab_folio_fast()로 재정의하고, try_grab_page()를 try_grab_folio()로 변경하여 적절한 경로에서 사용했습니다. 이는 오용과 커널 경고 모두를 해결합니다.

적절한 명명법은 사용 사례를 더 명확하게 하여 향후 오용을 방지하는 데 도움이 됩니다.

peterx가 언급함:

: 사용자가 고정을 실패하는 것을 보게 되며, gpu-slow의 경우 해당 실행 직후 WARN이 추가로 트리거됩니다(원래 보고서와 동일): : : folio = try_grab_folio(page, page_increm - 1, : foll_flags); : if (WARN_ON_ONCE(!folio)) { <------------------------ 여기
: /* : * folio에 문제가 있는 경우 첫 번째 페이지 ref를 해제하고 : * 강하게 실패합니다. : */ : gup_put_folio(page_folio(page), 1, : foll_flags); : ret = -EFAULT; : goto out; : }

[1] https://lore.kernel.org/linux-mm/[email protected]/

[[email protected]: try_grab_folio_fast 함수의 암시적 선언 수정]
Link: https://lkml.kernel.org/r/CAHbLzkowMSso-4Nufc9hcMehQsK9PNz3OSu-+eniU-2Mm-xjhA@mail.gmail.com

VulDB is the best source for vulnerability data and more expert information about this specific topic.

책임이 있는

Linux

예약하다

2024. 08. 21.

모더레이션

수락

항목

VDB-275984

EPSS

0.00183

출처

Do you need the next level of professionalism?

Upgrade your account now!