CVE-2023-52739 in Linux정보

요약

\~에 의해 VulDB • 2026. 05. 30.

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

__free_pages 내의 경합 조건(racy) 검사로 인한 페이지 손상 수정

커널을 업그레이드한 후, 다음과 같은 페이지 손상 현상이 지속적으로 발생하기 시작했습니다:

BUG: Bad page state in process ganesha.nfsd pfn:1304ca page:0000000022261c55 refcount:0 mapcount:-128 mapping:0000000000000000 index:0x0 pfn:0x1304ca flags: 0x17ffffc0000000() raw: 0017ffffc0000000 ffff8a513ffd4c98 ffffeee24b35ec08 0000000000000000 raw: 0000000000000000 0000000000000001 00000000ffffff7f 0000000000000000 page dumped because: nonzero mapcount CPU: 0 PID: 15567 Comm: ganesha.nfsd Kdump: loaded Tainted: P B O 5.10.158-1.nutanix.20221209.el7.x86_64 #1 Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 04/05/2016 Call Trace: dump_stack+0x74/0x96 bad_page.cold+0x63/0x94 check_new_page_bad+0x6d/0x80 rmqueue+0x46e/0x970 get_page_from_freelist+0xcb/0x3f0 ? _cond_resched+0x19/0x40 __alloc_pages_nodemask+0x164/0x300 alloc_pages_current+0x87/0xf0 skb_page_frag_refill+0x84/0x110 ...

때로는 이는 free list 포인터의 손상으로 나타나며 시스템 충돌을 유발하기도 합니다.

이슈를 이분 탐색(bisect)한 결과, 해당 문제는 커밋 e320d3012d25("mm/page_alloc.c: fix freeing non-compound pages")부터 시작됨을 확인했습니다:

if (put_page_testzero(page)) free_the_page(page, order); else if (!PageHead(page)) while (order-- > 0) free_the_page(page + (1 << order), order);

따라서 문제는 PageHead 검사가 경합 조건(race condition)을 가지고 있다는 점입니다. 이 시점에서는 이미 페이지에 대한 참조를 해제했기 때문입니다. 따라서 compound page로 진입하더라도, 페이지가 이미 해제되어 PageHead가 false를 반환할 수 있으며, 이로 인해 모든 tail page를 해제하게 되어 double free가 발생합니다.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

출처

Want to stay up to date on a daily basis?

Enable the mail alert feature now!