설명
메모리를 할당한 방식과 다른 해제 함수를 사용할 때 발생하는 취약점입니다. 예를 들어 new[]로 할당한 배열을 delete로 해제하거나, 커널 풀 할당을 일반 free로 해제하는 경우가 포함됩니다.
잠재적 영향
- 힙 또는 풀 메타데이터 손상으로 인해 크래시가 발생할 수 있습니다.
- 객체 소멸자가 올바르게 호출되지 않아 리소스 누수나 정의되지 않은 동작이 발생할 수 있습니다.
해결 방법
malloc계열 할당은free로 해제합니다.new는delete,new[]는delete[]로 해제합니다.- 플랫폼 또는 커널 전용 할당 API는 대응되는 전용 해제 API를 사용합니다.
예시
변경 전
cpp
void run() {
int *items = new int[16];
delete items;
}
변경 후
cpp
void run() {
int *items = new int[16];
delete[] items;
}
설명:
- 변경 전: 배열 할당에
delete를 사용하여 할당/해제 계열이 맞지 않습니다. - 변경 후:
new[]와 대응되는delete[]를 사용합니다.