할당 크기 정수 언더플로

할당 크기 정수 언더플로

설명

검증되지 않은 뺄셈 결과를 할당 크기로 사용하면 부호 없는 연산이 래핑되거나 음수 결과가 큰 부호 없는 값으로 변환되어, 의도보다 큰 할당을 요청할 수 있습니다.

잠재적 영향

  • 의도보다 큰 할당 요청, 할당 실패, 서비스 거부가 발생할 수 있습니다.

해결 방법

뺄셈 전에 피감수가 감수보다 크거나 같은지 확인하고 결과 범위를 제한합니다.

예시

변경 전

c
#include <stdlib.h>

void *allocate(size_t total, size_t header) {
    return malloc(total - header);
}

변경 후

c
#include <stdlib.h>

void *allocate(size_t total, size_t header) {
    if (total >= header) {
        return malloc(total - header);
    }
    return NULL;
}

설명:

  • 변경 전: total이 header보다 작은 경우 언더플로된 결과가 할당 크기로 사용됩니다.
  • 변경 후: 피연산자를 할당 크기 타입인 size_t로 명시하고, total >= header인 경우에만 뺄셈과 할당을 수행합니다.

참조