🇰🇷 한글 설명
Linux 커널의 AMD uncore 성능 모니터링 드라이버에서, CPU가 온라인 상태가 될 때 NB 및 LLC uncore 컨텍스트를 해제하면서 내부 events 배열을 해제하지 않아 메모리 누수가 발생합니다. 이는 kmemleak 탐지기로 확인되었으며, 해제 순서를 수정하여 해결되었습니다.
💡 쉬운 설명
컴퓨터가 특정 프로세서 기능을 켤 때 사용한 메모리 일부를 반납하지 않아 시간이 지나며 메모리가 조금씩 낭비됩니다. 이 문제는 장기간 가동되는 시스템에서 메모리 부족을 일으킬 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
perf/x86/amd/uncore: Fix memory leak for events array
When a CPU comes online, the per-CPU NB and LLC uncore contexts are
freed but not the events array within the context structure. This
causes a memory leak as identified by the kmemleak detector.
[...]
unreferenced object 0xffff8c5944b8e320 (size 32):
comm "swapper/0", pid 1, jiffies 4294670387 (age 151.072s)
hex dump (first 32 bytes):
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[<000000000759fb79>] amd_uncore_cpu_up_prepare+0xaf/0x230
[<00000000ddc9e126>] cpuhp_invoke_callback+0x2cf/0x470
[<0000000093e727d4>] cpuhp_issue_call+0x14d/0x170
[<0000000045464d54>] __cpuhp_setup_state_cpuslocked+0x11e/0x330
[<0000000069f67cbd>] __cpuhp_setup_state+0x6b/0x110
[<0000000015365e0f>] amd_uncore_init+0x260/0x321
[<00000000089152d2>] do_one_initcall+0x3f/0x1f0
[<000000002d0bd18d>] kernel_init_freeable+0x1ca/0x212
[<0000000030be8dde>] kernel_init+0x11/0x120
[<0000000059709e59>] ret_from_fork+0x22/0x30
unreferenced object 0xffff8c5944b8dd40 (size 64):
comm "swapper/0", pid 1, jiffies 4294670387 (age 151.072s)
hex dump (first 32 bytes):
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
backtrace:
[<00000000306efe8b>] amd_uncore_cpu_up_prepare+0x183/0x230
[<00000000ddc9e126>] cpuhp_invoke_callback+0x2cf/0x470
[<0000000093e727d4>] cpuhp_issue_call+0x14d/0x170
[<0000000045464d54>] __cpuhp_setup_state_cpuslocked+0x11e/0x330
[<0000000069f67cbd>] __cpuhp_setup_state+0x6b/0x110
[<0000000015365e0f>] amd_uncore_init+0x260/0x321
[<00000000089152d2>] do_one_initcall+0x3f/0x1f0
[<000000002d0bd18d>] kernel_init_freeable+0x1ca/0x212
[<0000000030be8dde>] kernel_init+0x11/0x120
[<0000000059709e59>] ret_from_fork+0x22/0x30
[...]
Fix the problem by freeing the events array before freeing the uncore
context.
📍 영향받는 시스템
AMD 프로세서를 사용하는 Linux 커널 (수정 이전 버전, 해당 uncore 드라이버 포함 빌드)
⚔️ 공격 벡터
원격 공격이 아닌 결함으로, 직접적인 악용 경로는 없고 지속적인 메모리 누수로 인한 서비스 저하가 주된 영향입니다.
🛡️ 대응 방법
패치가 적용된 최신 Linux 커널 버전으로 업데이트하거나 배포판 보안 업데이트를 설치합니다.
🔧 검증 코드
출력된 커널 버전이 배포판이 제공하는 패치된 버전 이상인지 확인하고, 해당 버전 정보는 배포판 보안 공지 또는 커널 changelog에서 대조합니다.