🇰🇷 한글 설명
Linux 커널의 powerpc/papr_scm 드라이버에서 papr_scm_priv.nvdimm_events_map의 'char *' 요소들이 papr_scm_remove() 및 papr_scm_pmu_register(), papr_scm_pmu_check_events()의 오류 경로에서 해제되지 않아 메모리 누수가 발생합니다. 또한 stat_id는 NULL 종료 문자열이 아닌 8바이트 고정 크기 식별자인데 일부 코드에서 문자열로 취급되어 문제가 됩니다. 수정 방식은 이벤트 맵 배열 할당 시 stat_id 공간을 함께 포함하도록 변경하는 것입니다.
💡 쉬운 설명
서버 하드웨어 관리 코드가 사용한 메모리를 제대로 반납하지 않아 시간이 지나면 메모리가 줄어드는 문제입니다. 고정 길이 식별자를 문자열처럼 다루는 실수도 함께 있어 수정이 필요합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
powerpc/papr_scm: Fix leaking nvdimm_events_map elements
Right now 'char *' elements allocated for individual 'stat_id' in
'papr_scm_priv.nvdimm_events_map[]' during papr_scm_pmu_check_events(), get
leaked in papr_scm_remove() and papr_scm_pmu_register(),
papr_scm_pmu_check_events() error paths.
Also individual 'stat_id' arent NULL terminated 'char *' instead they are fixed
8-byte sized identifiers. However papr_scm_pmu_register() assumes it to be a
NULL terminated 'char *' and at other places it assumes it to be a
'papr_scm_perf_stat.stat_id' sized string which is 8-byes in size.
Fix this by allocating the memory for papr_scm_priv.nvdimm_events_map to also
include space for 'stat_id' entries. This is possible since number of available
events/stat_ids are known upfront. This saves some memory and one extra level of
indirection from 'nvdimm_events_map' to 'stat_id'. Also rest of the code
can continue to call 'kfree(papr_scm_priv.nvdimm_events_map)' without needing to
iterate over the array and free up individual elements.
📍 영향받는 시스템
패치가 적용되지 않은 PowerPC 기반 Linux 커널 (papr_scm 드라이버 사용 환경, 수정 전 커널 버전)
⚔️ 공격 벡터
로컬 공격자가 직접 악용하기는 어려우며, 주로 장기간 실행 시 메모리 누수로 인한 서비스 안정성 저하가 주된 영향입니다.
🛡️ 대응 방법
해당 수정이 포함된 최신 Linux 커널 버전으로 업데이트하거나 배포판의 보안 업데이트를 적용하세요.
🔧 검증 코드
커널 버전을 확인해 배포판 보안 공지에서 해당 패치 포함 여부를 대조하고, papr_scm 모듈이 로드되어 있는지 확인합니다. 출력이 없으면 해당 드라이버가 사용되지 않는 환경입니다.
uname -r && grep -E 'PAPR_SCM|papr_scm' /proc/modules 2>/dev/null; lsmod | grep papr_scm