티스토리 뷰

반응형

 

 

 

가. 원인

  - 개발자가 직접 메모리 해제를 수행해야 하는 경우, 해제된 자원을 다시 해제하거나, 사용할 경우

 

 

나. 영향

  - 해제한 자원을 다시 참조할 경우, 오류가 발생하거나 비정상 실행

 

 

다. 보안대책

  - 동적으로 할당한 자원을 해제 후 포인터에 NULL을 저장하여 해제된 자원에 접근하지 않도록 구현

 

 

라. 안전한 코드

1. 자원해제 여부 확인

 

int function( char *argv ) {

  ...

  char *data;

  data = (char *)malloc( BUFFER_SIZE );

  ...

  memcpy( data, argv, BUFFER_SIZE -1 );

  data[BUFFER_SIZE-1] = '\0';

  ...

  // 할당한 메모리가 null이 아닐 경우에만 메모리 반환

  // 이후 다시 해제하더라도 오류가 발생하지 않도록 NULL로 초기화

  if ( data != NULL ){

     free( data );

     data = NULL;

  }

  ...

  return 0;

}

  

  

 

 

 

마. 진단방법

<자원해제 확인>

  1. 메모리와 같은 자원을 사용하는 코드가 존재하는지 확인

  2. 자원 사용 전 자원을 해제하고 있는지 확인

  3. 자원해제 후 NULL로 초기화 하고 있는지 확인

 

 

바. 정/오탐 케이스

<정탐 케이스>

  1. 메모리를 해제 후 다시 접근할 경우

  2. 메모리를 해제 후 NULL로 초기화 하지 않을 경우

반응형
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday