CVE-2026-97941
mm/slab: 경쟁 조건을 피하기 위해 __slab_try_return_freelist()에서 n->list_lock 획득
- 게시됨
- 2026. 9. 25.
- 업데이트됨
- 2026. 10. 19.
- CNA 할당 중
- Linux
- 증거 관찰됨
- 2026. 11. 4.
기본 CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H낮음 · 다음 30일
- 백분위수
- 6.8%
- 모델 날짜
- 2026. 11. 4.
EPSS는 통계적 추정치이지 확실성이나 영향의 척도가 아닙니다. 이를 CVSS, KEV 상태, 노출 및 환경과 결합하세요.
요약
Linux 커널에서 다음과 같은 취약점이 해결되었습니다: mm/slab: 경쟁 조건을 피하기 위해 __slab_try_return_freelist()에서 n->list_lock을 획득하도록 수정 커밋 ba7425312607 ("mm, slab: 낙관적인 __slab_try_return_freelist() 추가")은 slab->freelist가 NULL이고 cmpxchg가 성공하는 한 아무도 slab에 객체를 해제하지 않았다고 잘못 가정했습니다. 그러나 Hyunwoo Kim [1]이 보고한 바와 같이, 다른 CPU가 slab에 객체를 해제하고, 해당 slab을 partial 리스트에 삽입한 다음, slab에서 객체를 할당하고, n->list_lock 아래에서 리스트로부터 slab을 제거하는 중일 수 있습니다. __refill_objects_node()는 n->list_lock 외부에서 slab을 pc.slabs에 다시 넣기 때문에, slab이 동시에 n->partial에서 제거되는 동안 해당 리스트에 slab을 삽입할 수 있습니다. 이로 인해 리스트 손상 [1]이 발생했습니다: list_add 손상. next->prev는 prev(ffff888100000248)여야 하지만 dead000000000122였습니다. (next=ffffea000416e410). lib/list_debug.c:29에서 kernel BUG 발생! Oops: invalid opcode: 0000 [#1] SMP NOPTI CPU: 1 UID: 65534 PID: 144 Comm: poc Not tainted 7.2.0-16172-gcf72cbb39da8-dirty #1 PREEMPT(lazy) RIP: 0010:__list_add_valid_or_report+0x80/0xd0 ... Call Trace: alloc_from_new_slab+0x183/0x300 ___slab_alloc+0x31c/0x890 __kmalloc_noprof+0x3d4/0x800 lsm_blob_alloc+0x2d/0x50 security_msg_msg_alloc+0x26/0x90 load_msg+0x1aa/0x210 do_msgsnd+0x91/0x800 do_syscall_64+0x109/0x5d0 entry_SYSCALL_64_after_hwframe+0x77/0x7f ... Kernel panic - not syncing: Fatal exception 이는 cmpxchg는 성공하지만 __refill_objects_node()가 slab으로부터 freelist를 가져온 이후 상태가 변경된 전형적인 ABA 문제입니다. Vlastimil Babka가 언급한 바와 같이 [2], get_partial_node_bulk()에서 slab->counters를 경쟁적으로 읽기 때문에 둘 이상의 slab을 반환하는 경우는 드물어야 합니다. 따라서 추가적인 복잡성을 도입하는 대신, 최악의 경우 n->list_lock을 두 번 획득하고 해제합니다. slab을 partial 리스트에 직접 반환하고 cmpxchg와 add_partial() 전반에 걸쳐 n->list_lock을 유지합니다. 이는 커밋 ba7425312607의 초기 버전 [3]과 유사합니다. 리스트 조작이 n->list_lock에 의해 직렬화되므로 이는 경쟁 조건을 피하기에 충분합니다. 그와 동시에, 조건이 unlikely해졌으므로 unlikely() 힌트를 다시 추가합니다.
소스
CVE-2026-97941의 공식 PoC를 ARM64 Android로 이식한 것으로, SLAB 서브시스템 커널 취약점이며 7.0/7.2 커널에 맞게 레이스 타이밍과 힙 레이아웃을 이식했습니다.
책임 있는 사용
귀하가 소유하고 있거나 테스트할 권한이 있는 시스템에 대해서만 취약점 정보를 사용하십시오. Kitploit은 공개 연구 메타데이터에 연결되며 익스플로잇 코드나 악성 페이로드를 저장하지 않습니다.